【问题标题】:Database or flat file for millions of records?数百万条记录的数据库或平面文件?
【发布时间】:2015-05-13 13:13:17
【问题描述】:

假设每 10 秒生成一个由四个字符串(日期、名称、类型、价格)组成的元组。我正在用 Python 编写一个程序,以便将这些元组存储在磁盘中以供将来使用(只读1)。将有数百万个元组,因此“插入”操作在这里至关重要。这个问题的最佳解决方案是什么? SQLite、Postgres、MongoDB 还是平面文件?

1 我会从头到尾读取内存中几乎所有的数据。我不需要复杂的关系读取。例如,“SELECT price FROM table”就是我需要的。我根本不会使用任何索引。

【问题讨论】:

  • “只读”有点含糊……如何读取数据?如果你想要随机读取,平面文件不会很有趣。如果您需要复杂的关系读取,请使用 RDBMS。如果没有,mongo 可能是一个更好的选择......你需要什么类型的索引,等等 - 这是一个非常广泛的问题,而且信息太少。此外,每 10 秒插入一次,100M 将需要 31 年以上...
  • 我会从头到尾读取几乎所有内存中的数据。我不需要复杂的关系读取。例如,“SELECT price FROM table”就是我需要的。我根本不会使用任何索引。
  • 然后问问自己关于非功能性需求(复制、崩溃时发生的情况等)。平面文件可以做到这一点,而且它们总是最快的,但我个人会选择一个 mongodb。使用 WiredTiger,您还可以获得压缩,这可能对这种情况有所帮助......无论如何,我认为这是一个偏好问题,任何数据库都可以处理这个问题,平面文件也可以......
  • 感谢指正。 “几亿”实在是太多了。复制不是优先事项。我已经编写了一个基于 mongo 的解决方案和一个基于 sqlite 的解决方案。所以答案是“随便挑一个就行”,对吧?那我就选 mongo。

标签: mongodb postgresql sqlite flat-file database


【解决方案1】:

我肯定会推荐 mongo。使用索引,您可以在该组数据上获得非常好的性能。使用平面文件,您将不得不在应用程序逻辑中管理数据库系统的所有复杂性(假设您需要任何形式的紧急数据)。如果您在要查询的字段上添加索引,则在性能类别中应该没问题,尤其是当您仅在数百万条记录范围内时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2011-11-29
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多