Cassandra 对更新和集群密钥的处理如何交互?
- Cassandra 在写入后从不真正更新记录,它使用墓碑将旧版本标记为已删除,并同时记录旧版本和新版本,直到旧版本最终被内务处理过程删除:一种垃圾收集形式。
- 集群键是使用一些魔术来实现的,该魔术将数据记录在只有一个分区键的“真实”记录中。
让我感到震惊的是,这两个功能可能相互作用不好,导致产生过多的垃圾。
考虑这个模式:
CREATE TABLE t (
p int,
c int,
d string,
PRIMARY KEY ((p), c),
);
执行以下插入后:
INSERT INTO t (p, c, d) VALUE (1, 1, "text-1");
INSERT INTO t (p, c, d) VALUE (1, 2, "text-2");
是否有一个带有墓碑标记的记录保存(1, 1, "text-1")
数据和一个新记录保存数据(1, 1, "text-1")
和(1, 2, "text-2")
数据?也就是说,第二次插入是否被实现为对分区键 ( p
) 为 1 的“真实”记录的更新?