将图像和文件存储在文件系统还是非 RDBMS 上仍然是最好的选择

Is it still best to store images and files on a file system or non-RDBMS

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

我一直认为由于多层访问等原因,存储在 RDBMS 中很麻烦。但是,由于我们在非 RDBMS 数据库中使用 key/value 对,将文档存储在文件中是否更好系统还是数据库?感谢指点。

大约 7 年前有人问过类似的问题 (storing uploaded photos and documents - filesystem vs database blob)!我希望所有 NoSQL 数据库在技术上都有一些变化。所以,我再问一次。

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

这真的取决于(特别是所考虑的 DBMS,文件系统,它是远程的还是本地的,数据的总大小-PB 与 GB 不同-,users/documents 的数量等) .

如果数据在 1Gb/s 以太网上是远程的,那么网络就是瓶颈。所以使用 DBMS 不会增加显着的额外开销。请参阅 this interesting webpage 答案 部分或 STFW,了解 典型 PC 上各种操作的大致时间...

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

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

不仅要考虑 RDBMS,如 PostGreSQL, but also noSQL solutions à la MongoDB, and key-value stores à la REDIS

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

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

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