0

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

通过此类文件进行搜索和版本控制非常缓慢。复制这样的目录也相当麻烦。

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

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

4

2 回答 2

1

FileSystem 还有其他很大的缺点:

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

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

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

最大数据库大小 => 无限

于 2013-05-21T17:41:48.473 回答
1

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

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

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

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

于 2013-05-22T00:18:18.533 回答