0

最近我们将二级索引移到 Cassandra 中的物化视图。这是因为 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)

更改顺利进行了一天之后,其中一个节点开始随机运行。我说的是 3k IOPS 的 16 核机器中的 42 平均负载。所有其他节点都在 ~10 wa stat 的情况下工作正常,除了这个在顶部约为 ~70 wa 的特定节点。

检查 AWS EBS 仪表板,我看到 EBS 队列长度约为 30 左右,该节点的读写延迟约为 15 毫秒,这是巨大的。模式是读和写相等的部分。写入是具有约 15 列的恒定行流。

这是令人困惑的,因为对于多个 MV 只发出一个选择。读取吞吐量不应该增加。我无法理解这是否是由于添加了一个 MV 或其他一些问题。我错过了什么?

4

0 回答 0