我正在开发一个系统,用于存储用户的图片,以及将来的一些软文档。
我一直认为由于要访问多个层而存储在RDBMS中很麻烦。但是,由于我们在nonRDBMS数据库中使用键/值对,是否更好地将文档存储在文件系统或数据库中?谢谢你的任何指示。
大约7年前(storing uploaded photos and documents - filesystem vs database blob)询问了类似的问题!我希望在旋转中所有NoSQL数据库的技术都有一些变化。因此,我再次问这个问题。
如果我应该做其他事情而不是提出一个新问题,请纠正我。
答案 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字节,并将更大的数据存储在单个文件中(其路径进入数据库);但是你仍然应该避免使用非常宽的目录。
当然,不要忘记定义和应用(人为决定的)备份程序。