database - 使用数据库而不是成千上万的小文件

标签 database

在工作中,我开始研究一个程序,该程序每小时可能生成数十万个主要是小文件。我的前辈们发现处理许多小文件会变得非常慢,因此他们采用了一些(在我看来)粗暴的方法来缓解这个问题。

所以我问我的老板,为什么我们不使用数据库来代替,他给了我他非常有名的我比你知道的样子,并告诉我显然一个数据库这么大不会有好的表现。

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

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

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

最佳答案

这是另一个“视情况而定”类型的问题。

如果您只是写入数据(写入一次,几乎从不读取),那么只需使用文件系统即可。也许使用散列目录方法来创建许多子目录(单个目录中有许多文件,事情往往进展缓慢。

如果您要编写数十万个事件供以后查询(例如,查找 X > 10 且 Y < 11 的所有事件),那么数据库听起来是个不错的主意。

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

最好的方法可能是对您能想到的所有想法进行原型(prototype)制作、测量和比较!

关于database - 使用数据库而不是成千上万的小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6719189/

相关文章:

MySql:通过多个条件获取递增项目的计数

php - 如何根据查询中字段的相对位置对表中的列进行排序?

ruby-on-rails - 为什么有created_at和updated_at?

java - 在大型数据库缓存中删除或标记为已删除?

java - 创建和使用数据库 : Android

c++ - 将变量插入 SQLite 查询

database - 什么是 "multi point triggers"?

c# - 如何使用 sqlite 创建 asp.net web 应用程序

database - 在数据库中使用rowid有什么缺点吗?

c++ - 寻找时间序列数据的 C++ 数据仓库