我经历过这样一种场景,即每分钟在桌面上选择一个计数(*)(是的,这绝对应该避免)导致Cassandra写入每秒大约150K写入量的大幅增加。
任何人都可以解释这种奇怪的行为吗?为什么Select查询会显着增加Cassandra的写入次数?
谢谢!
答案 0 :(得分:0)
如果你检查
org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBackground
和
org.apache.cassandra.metrics:type=ReadRepair,name=RepairedBlocking
指标。如果您的数据不一致,读取计数(*)的所有数据可能会导致大量读取修复。如果是这种情况,降低表read_repair_chance
上的dclocal_read_repair_chance
和ALTER TABLE
可以减少负载。
其他可能的可能性是:
答案 1 :(得分:0)
可以在the write path of an update中找到可能的解释:
在写入期间,Cassandra会将每个新行添加到数据库,而不检查是否存在重复记录。此策略使数据库中可能存在同一行的许多版本。
然后
大多数Cassandra安装在两个或多个节点上存储每行的副本。每个节点独立执行压缩。这意味着即使从一个节点删除了一行的过时版本,它们仍可能存在于另一个节点上。
最后:
这就是Cassandra在阅读过程中进行另一轮比较的原因。当客户端使用特定主键请求数据时,Cassandra会从一个或多个副本中检索该行的多个版本。