我有一个 3 节点集群,replicate_factor 也是 3。一致性级别是写入仲裁、读取仲裁。交通有三大步骤
- 创造:
- 行键:xxxx
- 列:状态=新,请求=“xxxxx”
- 更新:
- 行键:xxxx
- 列:状态=正在执行,请求=“xxxxx”
- 删除:
- 行键:xxxx
当一个节点宕机时,它可以按照一致性配置工作,最终状态是所有请求都完成并删除。
因此,如果运行 cassandra 客户端来列出结果(也设置一致性仲裁)。显示为空(只剩下rowkey),正确。
但是如果我们启动死节点,提示切换模型会将数据写回该节点。所以有很多创建,更新,删除。
我不知道由于GC或compaction,其他两个节点上的删除记录似乎不起作用,如果使用cassandra客户端列出数据(也是一致性仲裁),删除的行再次显示列值。由于恢复节点再次重放历史。
而如果用客户端多次检查数据,你会发现数据发生了变化,似乎暗示了handoff replay操作,被删除的数据出现然后消失。
有没有办法让这个过程从外部不可见,直到提示的切换完成?
我想要的是最终状态同步,临时状态已经过时并且也不正确,不应该从外部看到。
是因为行删除而不是列删除吗?还是压实?