2016-01-23 85 views
1

我正在研究一个系统,该系统将存储用户的图片以及未来的一些软文档。是否最好在文件系统或非RDBMS上存储图像和文件

  • 用户数:4000个+
  • 成绩单和每用户其他文件:10 MB
  • 在第一年的总系统要求:40 GB
  • 附加每年递增10%
  • 归档归档每年:10%
  • 本地保存在Ubuntu Linux系统上,没有任何花哨的RAIDS。
  • 使用MySQL社区版进行应用。
  • 同时使用者:10至20
  • 文件仅用于历史目的,不会经常访问。

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

类似的问题被问到7年前(storing uploaded photos and documents - filesystem vs database blob)!我希望所有的NoSQL数据库都能在技术上发生一些变化。因此,我再次问这个问题。

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

+0

有多少用户?多少张图片和文件?图片和文档的典型大小是多少?他们将如何被访问?总数据量是多少?同时连接的数量?在什么电脑,操作系统,硬件上? (单个VPS,台式机工作站或数据中心)..请编辑您的问题以改进它**(否则它保持太宽) –

+0

将图像存储在需要编写代码的地方的好处是什么只是看看他们或平衡只是得到他们的维度?把它们放在一个大的非晶体块中,你需要备份的全部有什么好处?对不起,我只是不购买使用数据库来存储图像文件 - 我会每次都要使用文件系统。 –

+0

对于一个千字节或更小的* small *映像,文件系统磁盘空间和inode开销可能不可接受。 –

回答

0

它确实取决于(尤其是DBMS考虑的文件系统,它是远程还是本地,数据的总大小 - 字节数与千兆字节 - 用户/文档的数量等不同)。

如果数据在1Gb/s以太网上是远程的,那么网络就是瓶颈。所以使用DBMS不会增加额外的额外开销。见答案this interesting webpage部分,或STFW对于一个典型的PC各种操作粗略定时...

如果数据是本地的,不管事情更(但很少计算机有SATA磁盘1PB的)。 Linux上的大多数文件系统使用一些最小的块大小(例如1K字节,4K字节,...)。

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

不仅考虑RDBMS像PostGreSQL,也是NoSQL的解决方案点菜MongoDB和键值存储点菜REDIS

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

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

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

+0

巴西尔,我更新了我的问题。但是,既然您已经提供了相关信息,我将其标记为已回答。如果您想在查看我的更新后添加更多内容,请随时评论/编辑。 – SriSri

相关问题