【问题标题】:Saving attachments to database: blob vs path reference将附件保存到数据库:blob 与路径参考
【发布时间】:2013-12-21 16:25:36
【问题描述】:

我正在设计一个系统,可以创建一个条目,然后将附件添加到该条目,然后将其保存到数据库中。但是我对如何实现附件处理有两种看法。

我在两种方法之间挣扎:

  1. 将附件直接作为 blob 字段类型保存到数据库中
  2. 将目录路径保存到数据库中,并将实际文件保存到服务器

据我所知,这两种方法各有利弊。

第一种方法会将所有数据保存在同一个位置,因此如果我愿意,我可以轻松地将其移动到其他地方。就“数据在哪里”的猜测而言,它也使事情保持一致。另一方面,我听说保存这样的东西非常耗费资源,并且数据库大小会大幅增长。

第二种方法将允许数据库保留易于管理的数据字段,如文本和数字,而更重的东西在服务器上。如果需要,这也将允许更直接地访问文件。另一方面,数据是分离的,更难以跟踪,并且还需要引入文件系统访问以检索所述文件。

我倾向于第 1 种方法,但为此我希望得到以下答案:

将附件直接保存到数据库会如何影响数据库大小和 应用性能?

【问题讨论】:

  • “永远不要”是一种严重的夸大其词
  • @Sam 为什么?请我想听听一些推理,因为我已经看到将文件直接保存到数据库的应用程序,所以显然有人认为这是个好主意。
  • @Grietom 看到我的回答
  • @Grietom 只是因为有人这样做,并不意味着这是一个好主意
  • 也不代表这是个坏主意!

标签: mysql database blob


【解决方案1】:

不要将文档作为 blob 存储在数据库中。存储路径。 RDBMS 不是文档存储。 MySQL 不是为此目的而设计的,在 MySQL 中存储文档会使数据库变得不必要地庞大,并且几乎不可能进行数据检索,备份将需要很长时间,如果您的数据库发生问题,您的所有文件都会随之而来。文件存储几乎总是比 RDBMS 更好的文件存储选择。

【讨论】:

  • OTOH,tt 可能会使数据库必然变得庞大!如果您的文件存储出现问题,它会带走您的文件。可能有对你有利的可信论据,但我认为这些不是。
  • @Strawberry haha​​ 是的,存储为 blob 的几个视频就可以了
  • @Strawberry 文件存储(如 s3)具有数百个备份发行版几乎不会发生故障,而 EBS 上的硬盘故障则很常见。此外,EBS 的 I/O 价格比 S3 高得多。如果您认为我没有提出很好的理由,请回答您的观点。我很想了解更多。
  • 我想知道你们是否知道是否有人研究过存储一定数量和大小的文件时数据库会变得多大和多慢?
  • 我无法为您指出一项研究,但我正在处理一个具有 1 TB 数据的项目,并且 MySQL 工作正常。如果 db 设计正确,性能不会随大小而变化(假设它有资源和 RAM 可以利用)。并发是完全不同的主题。
【解决方案2】:

我有类似的问题,我认为我采取的方法取决于所需的附件类型 在我的情况下,我所做的是打开主要是文本的附件,并将数据简单地放在数据库中(而不是数据库只是存储附件)

这使我也可以轻松地查看内容内部(当然这与您期望的更新数量有关)

【讨论】:

  • 好吧,就我而言,附件几乎可以是任何内容:pdf、屏幕截图、office 文档、纯文本等。基本上是一个总是增加新的复杂程度的文件。
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2011-02-14
  • 2012-01-15
相关资源
最近更新 更多