将文件与数据关联的最佳方法是什么?

2023-11-25

我有一个在表中创建记录的应用程序(我知道这是火箭科学)。用户希望将文件(.doc、.xls、.pdf 等)关联到表中的单个记录。

  • 我应该存储的内容 数据库中的文件?这难道不是 使数据库膨胀?

  • 我应该将文件存储在文件中吗 服务器,并将路径存储在 数据库?

做这个的最好方式是什么?


我认为您已经准确地掌握了解决此问题的两种最流行的方法。各有利弊:

将文件存储在数据库中

大多数 rbms 支持在数据库中存储 blob(或二进制文件数据、.doc、.xls 等)。所以你并没有在这里开辟新天地。

Pros

  • 简化数据备份:您备份拥有所有文件的数据库。
  • 元数据(关于文件的其他列)和文件本身之间的链接是牢固的并内置于数据库中;因此,它是获取文件数据的一站式服务。

Cons

  • 当您将所有二进制数据存储在数据库中时,备份很快就会变成一场巨大的噩梦。您可以通过将文件保存在单独的数据库中来减轻一些麻烦。
  • 如果没有数据库或数据库接口,就没有简单的方法来获取文件内容来修改或更新它。
  • 一般来说,与文件系统相比,编码和协调数据上传和存储到数据库更困难。

将文件存储在文件系统上

这种方法非常简单,您将文件本身存储在文件系统中。您的数据库存储对文件位置的引用(以及有关文件的所有元数据)。这里的一个有用的提示是标准化磁盘上文件的命名模式(不要使用用户为您提供的文件,您自己创建一个文件并将其存储在数据库中)。

Pros

  • 让您的文件数据与数据库完全分离。
  • 易于维护文件本身(如果您需要更改文件或更新文件),您可以在文件系统本身中进行此操作。您可以从应用程序中轻松完成此操作,也可以通过新上传来完成。

Cons

  • 如果您不小心,有关文件的数据库可能会与文件本身不同步。
  • 安全性可能是一个问题(如果你不小心的话),这取决于你存储文件的位置以及该文件系统是否可供公众使用(我假设通过网络)。

最终,我们选择了文件系统路线。一旦我们锁定了任何漏洞并将文件流式传输出来(而不是直接从文件系统提供服务),就可以更轻松地快速实施,轻松备份,并且非常安全。它在两个不同的政府应用程序中以几乎相同的格式运行了大约 6 年。

J

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件与数据关联的最佳方法是什么? 的相关文章

  • Android:永久保存文件(即使在清除数据/卸载后)

    我想知道是否有一种方法可以永久存储少量数据 永久我的意思是即使用户清除应用程序数据 卸载应用程序 我也希望数据保留下来 我知道当用户清除应用程序数据 卸载应用程序时 共享首选项和数据库将被删除 我也知道我可以在 SD 卡上保存内容 但是如果
  • 系统找不到java中指定的文件

    我正在制作一个打开和读取文件的程序 这是我的代码 import java io public class FileRead public static void main String args try File file new File
  • 在 Android 上使用 FileOutputStream 创建的文件在哪里?

    我在代码中创建了一个文件 如下所示 FileOutputStream fOut openFileOutput samplefile txt MODE WORLD READABLE OutputStreamWriter osw new Out
  • 读取多个文件 cotent 的 React JS

    我正在尝试使用 React js 读取多个文件 但我的代码只读取一个文件 而不会读取其余文件 有什么建议吗 Thanks constructor props super props this state files changedFileI
  • 环回:原子读取和更新

    有没有办法在环回中实现类似的东西 LOCK READ INCREMENT UNLOCK 我想将计数器保留为数据库值 每个键都是一个计数器 或一个设置 并且它们不应该同时访问我的多个请求 此外 这也应该适用于本地请求 无 RemoteHook
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 如何调试 MySQL 存储过程?

    我当前的调试存储过程的过程非常简单 我创建一个名为 debug 的表 在存储过程运行时从其中插入变量值 这允许我查看脚本中给定点的任何变量的值 但是有没有更好的方法来调试 MySQL 存储过程 下列debug msg可以调用过程来简单地将调
  • Postgres - 如何在插入时自动调用 ST_SetSRID(ST_MakePoint(lng, lat), 4326)?

    我正在使用postGIS 并且我对SQL不是很熟悉 我可以成功插入到我的markers表只要我做这样的事情 伪代码 INSERT INTO markers created by title description lat lng geogr
  • C - sscanf 不忽略空格

    我正在读取文本文件并使用逗号作为分隔符 下面的行确实有效 但是当我打印出 lname 时 它 不会忽略逗号后面的空格并在名称之前打印空格 如何调整代码以忽略空格 文本示例 罗布 史密斯 4 12 岁 某某史蒂夫 琼斯 41 286 某个文本
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • 保存录制的 AVAudioRecorder 声音文件:现在怎么办? (iOS、Xcode 4)

    在我的应用程序中 我希望用户能够录制一个声音文件并播放它 然后保存该声音文件以供以后使用 我用了本教程 http www techotopia com index php Recording Audio on an iPhone with
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 什么是数据库池?

    我只是想了解数据库连接池的概念以及它是如何实现的 数据库联系池是一种用于保持数据库连接打开的方法 以便其他人可以重用它们 通常 打开数据库连接是一项昂贵的操作 尤其是在数据库位于远程的情况下 您必须打开网络会话 进行身份验证 检查授权等等
  • Sequelize.js - “不关联到”

    我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
  • Android Webview:无法调用确定的可见性() - 从未见过 pid 的连接

    我有一个 Android Webview 当我单击链接下载文件 pdf 图像等 时 我收到一条错误消息 Error message Cannot call determinedVisibility never saw a connectio
  • 是否可以使用 Java 在文件上设置自定义元数据?

    是否可以在 File 实例上获取和设置自定义元数据 我想将通过系统处理的文件用作某种非常简单的数据库 其中每个文件都应包含其他自定义元数据 例如发件人的电子邮件 一些时间戳等 它是针对内部系统的 因此安全性不是问题 在 java 7 中你可
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s

随机推荐