我对墓碑影响 Cassandra 读取有点困惑。这是第一种情况:
有一个 Cassandra 表:
CREATE TABLE IF NOT EXISTS URL_MAPPINGS (
pagehash text,
url text,
address text,
PRIMARY KEY ((pagehash), url)
)
我在此表中插入两个条目:
INSERT INTO url_mappings (pagehash1, url1, address1)
INSERT INTO url_mappings (pagehash2, url2, address1)
然后我在这张表上使用 nodetool flush 并清楚地看到保存的两个值(使用 sstabledump)。
然后我更新第一条记录中的地址值:
UPDATE url_mappings SET address='updated' WHERE pagehash='pagehash2' AND url='url2';
我再次在此表上使用 nodetool flush 并看到为第一个条目地址列添加了一个墓碑。
好的,现在我通过以下方式读取这些值
SELECT * FROM url_mappings;
在 sqlsh 中设置了 TRACING ON。我看到返回了 2 个最新条目,并带有以下调试输出:
读取 2 个活动行和 0 个墓碑单元
AFAIK 升级不构成墓碑,但是我可以看到读取了多个 SSTable 以返回结果。
一旦我删除了第一条记录 - 我可以在再次读取所有表值时在输出中看到以下内容:
读取 1 个活动行和 1 个墓碑单元
这就是我希望看到的。但是,当我对剩余记录执行此查询时:
SELECT pagehash, url, address, ttl(address) FROM url_mappings WHERE pagehash='somethin2';
我看到以下跟踪信息:
读取 1 个活动行和 0 个墓碑单元
问题是为什么只有在 WHERE 子句中没有指定列的情况下才会选择墓碑?