关于墓碑的 Cassandra 地图和专栏更新

Cassandra map and column update regarding tombstones

我有以下内容table:

CREATE TABLE example
(
    id text,
    users map<text,text>,
    lastvisit int,
    ...
    PRIMARY KEY (userid)
);

有时我会更新列或地图条目,例如:

1) update example set users = users - {'JOE'} where id = 'id';
2) update example set users = users + {'JOE':'meta'} where id = 'id';
3) update example set lastvisit = 100 where id = 'id';

我需要知道每个查询如何以逻辑删除和压缩的方式处理旧数据。

以下是我研究/建议的,但特别是关于我缺乏信息的地图。

  1. 删除键 = 'JOE' 处的映射条目,方法是仅为映射中的该条目生成墓碑。压缩时该值被删除。

  2. 将键值对插入映射。由于有更新的条目,旧条目在压缩时被删除。

  3. 列条目已更新,与 2 中一样,旧值在压缩中被删除

每种情况下的问题是,整行会再次写入还是只写入具有较新时间戳的更新值?

  1. 将插入 key = 'BOB' 的地图项的墓碑。
  2. 该行没有被覆盖。只需添加一个新的地图项。
  3. 严格来说,这不是 UPDATE -- 将插入一个新列。 C* 中的所有突变都是隐藏的插入,即使是删除也是如此。

这里有一些额外的要点:

您的架构中有错字。应该是——users map<text,text>.

对于 (1),您需要将该项括在大括号中,否则 CQL 语句无效 -- {'JOE'}.

对于 (2),您需要一个冒号 (:) 来分隔键和值 -- {'JOE':'meta'}.

对于 (3),没有证据表明 lastvisit 已定义,因此将插入一个新列 lastvisit = 100,并且没有要删除的旧值。干杯!