0

我有这个下表:

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. 通过仅为映射中的条目生成墓碑来删除 key = 'JOE' 处的映射条目。压缩时,该值被丢弃。

  2. 将键值对插入映射。旧条目在压缩时被删除,因为有一个新条目。

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

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

4

1 回答 1

2
  1. key = 'BOB'将要插入的地图项的墓碑。
  2. 该行不会被覆盖。只需添加一个新的地图项。
  3. 严格来说,它不是UPDATE——将插入一个新列。即使对于删除,C* 中的所有突变都是幕后插入。

以下是一些额外的要点:

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

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

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

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

于 2021-08-17T12:05:51.103 回答