在数据库中的Blob或指向文件的指针?

dai*_*chi 1 php mysql

可能重复:
何时将图像存储在数据库(mySQL)中,何时不存储?(将图像链接到数据库中的项目)
在服务器上存储文件的最佳方法(在数据库中或单独存储位置)?

在将MP3/pdf与数据库存储之间,我应该考虑什么才能做到最佳选择.将文件作为BLOB存储在数据库中更好吗?或者是否有一个允许我查看文件系统的字段更好?

问题中的文件不可能超过15MiB,但在考虑的情况下,所有文件都可能至少为1MiB.

数据将通过PHP访问,如果这有所不同......

编辑:我将继续使用数据库中带有文件名的文件系统上的资源.谢谢或输入!

Rea*_*lar 5

在过去的3年里,我一直致力于一个项目,其中大型附件存储在数据库中.

好处

  • 管理数据库中的记录比处理相关文件更容易,代码更少.
  • 即使使用CakePHP的行为来自动完成任务.数据库更容易.
  • 某些项目具有将数据保存在数据库中的安全要求(即使它并未真正提高安全性).
  • 自动构建过程可以轻松备份数据,因为它已经存在于数据库中.

缺点

  • 拍摄数据库的快照以进行开发是一件痛苦的事.
  • 在传递几个GB之后.不管别人告诉你什么.你会开始怀疑数据库引擎是否可以处理它.
  • 转储数据库开始需要很长时间.
  • 数据迁移到不同的模式开始需要非SQL解决方案.

关于DB Blobs的神话

  • 您的数据库无法处理大型数据库文件大小.
  • 硬盘上的一个坏扇区意味着您可能丢失所有blob数据.
  • 存储在数据库中存在性能成本.
  • 它更安全.
  • 从数据库读取并发送到客户端比读取文件和发送文件要慢.

以上所有(根据我的经验)是错误的.

关于大Blob的事实

  • 有一段时间你不再需要它在数据库中.
  • GUID记录标识符是您的朋友.不要在文件名中使用record(int)ID.
  • 您无需从文件名中反向查找记录,但需要从记录中查找文件.所以你可以使用guid作为文件名.
  • 备份/复制文件系统和小型数据库,然后只是一个大型数据库更容易.
  • 不要将文件存储在您的webroot中.