我正在使用Cassandra 2.2,其中的提示存储在system.hints表中。由于node-Id是分区键,因此对于写入较重的系统,表在3小时内(默认提示窗口)可以轻松地超过每个分区2个Bn单元限制。对于写入较重的系统,是否首选减少此窗口?
此外,出于测试目的,我将节点关闭,然后在一段时间后再启动。理想情况下,在提示重放后,提示表应该被截断并压缩,但我注意到该表仍然包含所有条目,为什么不清除?另外,如何验证重播是否已经发生?
答案 0 :(得分:1)
升级到3.0将解决很多HH问题,当时有很多人喜欢这样。可以看到here了解更多细节,但基本上使用C *表作为这样的队列本身就是一种反模式,所以它被改为更类似于更好地运行的commitlog。这绝对是你最好的选择。
减少HH窗口会起作用,但请注意,如果某个节点的停机时间超过该窗口,则必须进行修复,因为您将丢失数据。
它们不会被截断,但会被删除,您需要等待压缩才能清除它们。在节点恢复之前提交提示之前,它应该进行一次重大压缩,以便清除。要验证我只是从表中读取(select count(*)
),任何删除都将被计算在内。
即关闭node2,插入一个值并观察:
cqlsh:keyspace1> select count(*) from system.hints where target_id = 8e821294-50de-46d4-b668-f4dce69797aa;
count
-------
1
(1 rows)
启动node2,等待HH消耗:
cqlsh:keyspace1> select count(*) from system.hints where target_id = 8e821294-50de-46d4-b668-f4dce69797aa;
count
-------
0