可以选择计数(*)影响在Cassandra中写入

时间:2016-11-10 07:46:19

标签: count cassandra cql

我经历过这样一种场景,即每分钟在桌面上选择一个计数(*)(是的,这绝对应该避免)导致Cassandra写入每秒大约150K写入量的大幅增加。

任何人都可以解释这种奇怪的行为吗?为什么Select查询会显着增加Cassandra的写入次数?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果你检查

org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBackground

org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBlocking

如果其读取修复发送突变,您可以看到

指标。如果您的数据不一致,读取计数(*)的所有数据可能会导致大量读取修复。如果是这种情况,降低表read_repair_chance上的dclocal_read_repair_chanceALTER TABLE可以减少负载。

其他可能的可能性是:

  • 您已启用跟踪(全局或在桌面上)为%。
  • 或者如果您使用DSE并且启用了慢查询。

答案 1 :(得分:0)

可以在the write path of an update中找到可能的解释:

  

在写入期间,Cassandra会将每个新行添加到数据库,而不检查是否存在重复记录。此策略使数据库中可能存在同一行的许多版本。

然后

  

大多数Cassandra安装在两个或多个节点上存储每行的副本。每个节点独立执行压缩。这意味着即使从一个节点删除了一行的过时版本,它们仍可能存在于另一个节点上。

最后:

  

这就是Cassandra在阅读过程中进行另一轮比较的原因。当客户端使用特定主键请求数据时,Cassandra会从一个或多个副本中检索该行的多个版本。