1

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

我应该考虑在使用数据库存储 MP3/pdf 之间进行最佳选择。将文件作为 BLOB 存储在数据库中会更好吗?还是只有一个允许我查看文件系统的字段更好?

有问题的文件不太可能超过 15MiB,但都可能至少为 1MiB,以防万一。

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

编辑:我将使用我已经在做的事情:) 文件系统上的资源以及数据库中的文件名。谢谢或输入!

4

3 回答 3

5

在过去的 3 年里,我一直在从事一个项目,其中大型附件存储在数据库中。

好处

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

缺点

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

关于 DB Blob 的神话

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

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

关于大斑点的事实

  • 有一天,您不再需要它在数据库中。
  • GUID 记录标识符是您的朋友。不要在文件名中使用记录 (int)ID。
  • 您不需要反向从文件名中查找记录,但您需要从记录中查找文件。所以你可以只使用 guid 作为文件名。
  • 备份/复制文件系统和小型数据库更容易,然后只是大型数据库。
  • 不要将文件存储在您的 webroot 中。
于 2013-01-16T22:09:05.197 回答
4

我认为对于大多数用例,仅存储文件路径是最好的方法。对我来说,这种方法的优点包括:

  • 对于用户可以下载的图像或其他文件的情况,您可以让客户端直接下载/缓存文件。
  • 允许在将来某个时候需要时实施 CDN(即只需更新数据库中的文件引用
  • 它将大大减少在应用程序和数据库之间传回的数据量,潜在地消除额外的带宽使用(如果数据库在远程服务器上)并使您的查询响应更快(因此不会占用您的数据库)。
  • 它使数据库备份更快。
  • 它允许您对资产使用传统的文件管理技术。

存储 blob 有一些潜在的用例:

  • 也许您想对资产执行某种二进制搜索(尽管很容易认为有比 MySQL 更好的解决方案)。
  • 由于某种原因,您需要保证没有孤立文件或没有实际文件的条目(即提交图像事务)
于 2013-01-16T22:04:29.060 回答
-2

最好的办法是将文件保存在上传目录中,然后将该位置传递给 MySQL

于 2013-01-16T21:56:11.113 回答