是否最好将图像和文件存储在文件系统或非RDBMS上

时间:2016-01-23 17:46:56

标签: image storing-data

我正在开发一个系统,用于存储用户的图片,以及将来的一些软文档。

  • 用户数:4000 +
  • 每位用户的成绩单和其他文件:10 MB
  • 第一年的总体系统要求:40 GB
  • 额外增量每年:10%
  • 归档减少每年:10%
  • 在Ubuntu Linux系统上本地保存,没有任何奇特的RAIDS。
  • 使用MySQL社区版进行申请。
  • 同时用户:10到20
  • 文件仅供参考,不会经常访问。

我一直认为由于要访问多个层而存储在RDBMS中很麻烦。但是,由于我们在nonRDBMS数据库中使用键/值对,是否更好地将文档存储在文件系统或数据库中?谢谢你的任何指示。

大约7年前(storing uploaded photos and documents - filesystem vs database blob)询问了类似的问题!我希望在旋转中所有NoSQL数据库的技术都有一些变化。因此,我再次问这个问题。

如果我应该做其他事情而不是提出一个新问题,请纠正我。

1 个答案:

答案 0 :(得分:0)

这实际上取决于(特别是所考虑的DBMS,文件系统,远程或本地,数据的总大小 - 千兆字节与千兆字节不同,用户/文档的数量等)。

如果数据在1Gb / s以太网上是远程的,则网络是瓶颈。因此,使用DBMS不会增加额外的额外开销。请参阅this interesting webpage答案部分或STFW的典型PC上各种操作的近似时序 ...

如果数据是本地数据,那么事情就更重要了(但很少有计算机拥有1 PB的SATA磁盘)。 Linux上的大多数文件系统每个文件使用一些最小的块大小(例如1Kbytes,4Kbytes,...)。

可能的方法可能是有一些阈值(通常是4或8千字节,甚至可能是64千字节,即几页; YMMV)。小于它的数据可能直接是数据库中的字段,数据大于文件中的数据。数据库有时可能包含数据的文件路径。阅读数据库中的BLOB

不仅要考虑像PostGreSQL这样的RDBMS,还要考虑没有SQL解决方案(la MongoDB)和键值存储(la REDIS等)。

对于本地数据方法,不仅要考虑普通文件,还要考虑sqlite& GDBM等。如果您使用文件系统,请考虑避免使用非常宽的目录,因此不要将widedir/000001.jpg .... widedir/999999.jpg组织为dir/subdir000/001.jpg ... dir/subdir999/999.jpg,每个目录不超过一千个条目。

如果您在本地使用MySQL数据库,并且不考虑大量数据(例如,小于1 TB),则可以直接在数据库中存储任何小于例如数据的原始数据。 64K字节,并将更大的数据存储在单个文件中(其路径进入数据库);但是你仍然应该避免使用非常宽的目录。

当然,不要忘记定义和应用(人为决定的)备份程序。