使用数据库而不是数千个小文件

时间:2011-07-16 17:59:34

标签: database

在工作中,我已经开始研究一个可能每小时生成数十万个小文件的程序。我的前辈们发现,使用许多小文件可能会变得很慢,所以他们采用了一些(在我看来)原始方法来缓解这个问题。

所以我问我的老板为什么我们不会使用数据库而是他给了我他那么着名的我知道比你看起来更好看并告诉我显然一个数据库那个大将不会有一个好的表现。

我的问题是,它真的如此吗?在我看来,数据库引擎应该能够比文件系统更好地处理这些数据。以下是我们的条件:

  • 程序主要是写数据。查询的频率要低得多,而且性能也不是很重要。
  • 每天都可以生成数百万个文件。其中大部分都很小(几千字节)但有些可能很大。

如果您认为我们应该选择数据库解决方案,您认为哪种开源数据库系统最有效? (如果我认为数据库肯定会更好用,那么无论老板说什么,我都会推动改变!)

2 个答案:

答案 0 :(得分:6)

这是另一个“依赖”类型的问题。

如果您只是编写数据(只写一次,几乎没有读过),那么只需使用文件系统即可。也许使用哈希目录方法来创建许多子目录(在一个目录中,许多文件的内容往往很慢。

如果您要编写数十万个事件供以后查询(例如,查找X> 10和Y< 11的所有内容),那么数据库听起来就像一个好主意。

如果您正在编写数十万比特的非关系数据(例如简单的键值对),则可能值得研究NoSQL方法。

最好的方法可能是将您能想到,衡量和比较的所有想法原型化!

答案 1 :(得分:2)

作为最小的影响改进,我将数以百万计的小文件分成目录。所以说你使用uuids作为你的文件名,我给出了多余的urn:uuid:在前面,然后根据第一个字母制作16个目录,在里面根据第二个字母制作16个子目录,并且如果需要,可以添加更多级别。仅此一点就可以加快访问速度。此外,我会删除目录,只要它变空,以确保目录条目本身不会变得越来越大。