BLOB与文件系统的区别

8
虽然这个问题在之前的帖子中已经出现过,但是不同的情况和不同的考虑会决定哪一个是最好的选择。
我需要实现一个系统,可以处理每年200GB-400GB的图像大小(每张图片大约小于1MB)。这些是仅允许授权人员访问和查看的 P&C 图像。我计划使用一种基于应用程序的系统将其插入到 MYSQL 数据库,并使用仅供查看的 PHP Web 应用程序。
我考虑使用 FILESYSTEM,因为它易于对图像进行备份和恢复,而且不需要担心 MYSQL 数据库的大小。
我正在使用在 Windows Server 中运行的 MySQL + Apache + PHP。
非常感谢您的建议和意见。
谢谢。
敬礼, Desmond

没有人会建议将一年价值400GB的图片放入数据库中。大多数情况下,还是使用文件系统更好。 - Hanky Panky
这个问题听起来与过去关于将图像存储在数据库中与存储在文件系统中的问题非常相似。这个问题有何不同之处? - Bill Karwin
2个回答

13

值得一读的内容: 在构建应用程序时进行文件存储的最佳实践-数据库(Blob存储)与文件系统

BLOB存储作为最佳解决方案

  • 更好的可伸缩性。尽管文件系统被设计用于处理各种大小的大量对象,例如文件和文件夹,但它们实际上并未针对数以千万计的小文件进行优化。数据库系统则对这种情况进行了优化。

  • 更好的可用性。数据库服务器具有超越文件系统提供的可用性功能。数据库复制是一组解决方案,允许您在分布式环境中复制、分发和潜在地修改数据,而日志运送提供了在主系统失败的情况下保持数据库备份的方法。

  • 控制增长的数据中心仓库。DBA有权控制和监视数据库的增长,并在需要时拆分数据库。

  • 全文索引和搜索操作。您可以对存储在BLOB列中的某些类型的数据进行索引和搜索。当数据库设计人员决定表将包含BLOB列并且该列将参与全文索引时,设计人员必须在同一表中创建一个单独的基于字符的数据列,该列将保存相应BLOB字段中文件的文件扩展名。在全文索引操作期间,全文服务查看字符型列中列出的扩展名(.txt、.doc、.xls等),应用相应的过滤器来解释二进制数据,并提取所需用于索引和查询的文本信息。

文件系统存储作为最佳解决方案

  • 对于需要流式性能的应用程序,例如实时视频播放。
  • 对于诸如Microsoft PhotoDraw®或Adobe PhotoShop之类只知道如何访问文件的应用程序。
  • 如果您要在NTFS文件系统中使用某些特定功能,例如远程存储。

9

小于256K的对象最好存储在数据库中,而大于1M的对象最好存储在文件系统中。在256K和1M之间,读写比率以及对象覆盖或替换的速率是重要因素。

souce: http://research.microsoft.com/apps/pubs/default.aspx?id=64525

编辑:这是MS SQL,所以可能与Mysql相同 :)


1
由于大多数人使用文件系统,当您遇到问题时,会有更多的人来帮助您。但是,如果您使用blob,图像更容易组织、删除等。这取决于您。 - Eathen Nutt
我关注通过文件系统开放文件夹以进行HTTP访问的安全问题。 - Chris
人们可以通过文件系统的不同方式(如FTP、HTTP)获取您的图像,但对于数据库,我所知道的唯一方法是使用SELECT语法。因此,也许MySQL更安全,但备份Blob很麻烦。 - Eathen Nutt
是的,备份和恢复 blob 真的让人痛苦。对我来说速度还可以...我想我会选择安全或更容易的备份/恢复...真的很难选择。 - Chris
选择文件系统,您会感到满意的。它更快、更兼容、易于备份,问题更少。 - Eathen Nutt
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接