最近我们将二级索引移到了Cassandra中的Materialized视图中,这是因为SASI索引由于我们的频繁更新而崩溃了,而且我们正陷入每个索引最多只能有五个条目的SASI稀疏索引的限制。 之前我们的桌子有一个特定的实例化视图 基本表:
CREATE TABLE IF NOT EXISTS chats (
user_id bigint,
peer_id bigint,
msg_id text,
text text,
timestamp timestamp,
updated_at timestamp,
PRIMARY KEY (user_id, peer_id, msg_id)
) WITH CLUSTERING ORDER BY (msg_id ASC)
和实例化视图:
CREATE MATERIALIZED VIEW IF NOT EXISTS chats_by_updated AS
SELECT * FROM chats
WHERE user_id IS NOT NULL AND updated_at IS NOT NULL
PRIMARY KEY (user_id, updated_at, peer_id, msg_id)
WITH CLUSTERING ORDER BY (updated_at ASC, peer_id ASC, msg_id ASC)
我们决定添加另一个实例化视图
CREATE MATERIALIZED VIEW IF NOT EXISTS chats_by_updated AS
SELECT * FROM chats
WHERE user_id IS NOT NULL AND updated_at IS NOT NULL
PRIMARY KEY (user_id, peer_id, updated_at, msg_id)
WITH CLUSTERING ORDER BY (updated_at ASC, peer_id ASC, msg_id ASC)
更改顺利进行了一天,然后其中一个节点开始随机运行。我说的是16核机器上3k IOPS的平均42个负载。其他所有节点在〜10 wa stat下都可以正常工作,除了这个特定节点的顶部约为〜70 wa。
检查AWS EBS仪表板,我发现该节点的EBS队列长度约为30,并且读写延迟约为15 ms。 模式是相等部分的读写。写入是具有约15列的恒定行流。
这令人困惑,因为针对多个MV仅发出一个选择。读取吞吐量不应增加。我不知道是否由于添加更多MV或其他问题而发生这种情况。 我想念什么?