Cassandra或PostgreSQL:每分钟大量插入

时间:2017-11-05 04:32:14

标签: database postgresql cassandra

以下是我的情景:

  1. 100,000多张表
  2. 我要每分钟在每个表格中插入一次,即每分钟超过100,000次插入所有在单独的表中
  3. 数据丢失并不重要,但速度和成本确实如此。
  4. 插入字段为id,param1,param2,param3,param4,param5,timestamp。
  5. 请告知我这个案例哪个数据库会更快,更便宜。

2 个答案:

答案 0 :(得分:10)

Cassandra可能面临100,000个独立表格的严重可扩展性问题。 100,000个单独的表意味着100,000个打开文件的多个(因此您需要确保您的内核配置为允许这么多打开的文件),100,000个memtables(每个表的最后修改暂时保存在内存中)所以你'我需要大量的内存。

在Cassandra中执行此类操作的另一种方法是使用一个表,具有100,000个不同的分区(这是宽行的Cassandra名称)。每分钟您要为每个现有分区添加另一行(一个小条目)。为了避免分区在添加条目数月之后变得越来越大,通常做的就是每周(比如每周)开始一个新的分区(每周大约有10,000分钟)。在Cassandra建模中,这通常被称为“时间序列数据”。

在您的问题中,您只提到编写数据,而不是阅读它。假设这不是一个疏忽,你真的更关心写性能而不是读性能,那么Cassandra是一个很好的选择,因为它对写入来说特别快。如果你绝对关心速度和每美元性能,你还应该看看 Scylla ,这是在C ++中重新实现Cassandra。

答案 1 :(得分:0)

听起来像数据模型适合时间序列模型。 TimeScaleDB 可以使用新的分布式模型处理您的模型。这些表只是一个更多的索引字段。 IE。按时间顺序保存数据,启用压缩。可以考虑不同类型的索引,而不仅仅是 B 树。

我们的财务数据测试显示出惊人的压缩率 - 特别是如果所有表在关闭时间段内都有相似的数据,例如使用 3-4k 仪器累积和缩放值。没有尝试使用 100k,但可能会考虑做一些基准测试,看看限制在哪里,以及在不同机器/集群急剧降级的情况下分片。

如果决定管理多个手动共享的服务器,维护可能会有点问题,但与现代集群相比,单个机器可以节省成本。如果可以容忍数据丢失,则可以使用多个强大的隔离盒,例如在合理的时间内从不同来源重播(如从档案中有效重播市场数据)

相关问题