【问题标题】:SQL or filesystem for FAST storing files/BLOBs? [closed]用于 FAST 存储文件/BLOB 的 SQL 或文件系统? [关闭]
【发布时间】:2013-05-16 13:21:28
【问题描述】:

我有一个应用程序,它使用诸如“6/0/3/6/....”之类的嵌套目录将大量出版物作为文件存储在文件系统上。文件并不大(.jpg、.pdf、类似文件),“只是”很多,达到数百 GB。一旦存储在 fs 中,它们通常不会被重写,只是通过 http 提供。

通过此类文件进行搜索和版本控制非常痛苦。复制这样的目录也比较麻烦。

这让我开始思考:将 BLOB 等数据存储在 db 中不是更好吗(无论如何,我的应用程序出于各种目的使用 postgres)。

哪一个——fs 或可扩展的 sql db——可以在所有方面表现得更好?或者PG会在这么重的重量下崩溃吗?

【问题讨论】:

    标签: sql linux postgresql filesystems blob


    【解决方案1】:

    文件系统的增量备份要容易得多。从部分损坏中恢复也是如此。只要您不需要原子更改集,只需要单独的文件版本控制,就可以在文件系统之上进行版本控制。

    另一方面,使用数据库可以获得事务行为 - 原子提交、多个并发一致快照等。它会降低磁盘存储效率并增加访问开销。这意味着您不能只sendfile() 直接从文件系统中获取数据,您必须进行几个 内存副本和一些编码才能获取和发送文件。

    对于高性能服务器,文件系统几乎肯定会胜出,除非您真的需要原子提交和多个版本的同时一致的可见性。

    您可能也应该阅读许多相关的过去问题,其中大部分是关于将图像存储在数据库中还是文件系统中更好。

    【讨论】:

    • "文件系统的增量备份更容易。" -- 我不太明白,毕竟为 BLOB/BYTEA 存储时间戳有多难?当然,一个人必须自己写这个,而一个人得到了一些很棒的东西,比如开箱即用的 rsync。但随后它会与您的应用集成,同时保持 blob 和文件同步可能会很棘手。
    • "只要您不需要原子更改集,只需单个文件版本控制,就可以在文件系统之上轻松进行版本控制。" - 呃,我刚刚被这个烫伤了。我已经完成了“git add”。对于有问题的出版物的目录和 git 在挂在那里几个小时后由于磁盘空间耗尽而退出(尽管我有 40% 的分区可用空间)。我的印象——可能是错误的——对 blob 的时间戳执行 SELECT,然后通过网络将 blob 发送到备份系统可能会更快。
    • “对于高性能服务器,文件系统几乎肯定会胜出,除非你真的需要原子提交和多个版本的同时一致的可见性。” - 可能,但我喜欢在类似于生产系统的条件下做一些可靠的基准测试。我找到的最好的是 1993 年关于 citeseer 的 PG 和 fs 比较论文,现在还不是最好的资源。
    • “您可能也应该阅读许多相关的过去问题,其中大部分是关于将图像存储在数据库中还是文件系统中更好。” ——当然,我读过那些。而且我读过的结论都落入不同的方向,它们是完全矛盾的,而且大多数都依赖于挥手和声称是合理的而不是经过证实的。因此,我再次问了这个问题。我觉得我必须自己做一些测试才能解决这个问题!
    • 看看这个问题的答案——你的答案与上面 Christophe 给出的答案几乎相反。
    【解决方案2】:

    文件系统还有其他很大的缺点:

    1. 您可能会遇到用户权限问题
    2. 不是原子的

    当处理小于 1GB 的 BLOB 时,我会 100% 将它们存储在数据库中,因为所有好的系统数据库都可以正确处理 BLOB。 (它们以不同于结构化数据的方式存储它,但它对您不可见)

    顺便说一句,当你在http://www.postgresql.org/about/阅读时

    最大数据库大小 => 无限制

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2014-02-26
      • 2012-11-04
      相关资源
      最近更新 更多