【问题标题】:Cassandra seconday index vs materialized viewCassandra 二级索引与物化视图
【发布时间】:2017-02-10 12:02:50
【问题描述】:

我正在为 Cassandra 3.0+ 建模我的表。目标是建立一个存储用户活动的表,这是我到目前为止所做的: (userid来自另一个数据库Mysql)

CREATE TABLE activity (
    userid int,
    type int,
    remoteid text,
    time timestamp,
    imported timestamp,
    visibility int,
    title text,
    description text,
    img text,
    customfields MAP<text,text>,
PRIMARY KEY (userid, type, remoteid, time, imported))

这是我使用的主要查询:

SELECT * FROM activity WHERE userid = ? AND remoteid = ?;
SELECT * FROM activity WHERE userid = ? AND type = ? AND LIMIT 10;

现在我需要在第二个查询中添加 visibility 列。因此,根据我所了解的,我可以在二级索引物化视图之间进行选择。 这是事实:

  • 这里我为每个用户设置了一个分区,里面有数千行(活动)。
  • 我在所有查询中始终使用分区键 (userid) 来访问数据。
  • 全球活动数量为 3000 万,还在不断增长。
  • visibility 列的基数很低(只有 3 个值),可以更新,但很少。

那么我应该选择什么?物化视图或索引?我知道低基数的索引是不好的选择,但我的查询总是包含分区键和限制,所以也许还不错。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    如果你总是要使用分区键,我建议使用二级索引。

    当您不知道分区键时,物化视图会更好

    参考资料:

    主要文章!

    Cassandra Secondary Index Preview #1

    这是物化视图和二级索引的比较

    Materialized View Performance in Cassandra 3.x

    这里是已知 PK 使用索引更有效的地方

    Cassandra Native Secondary Index Deep Dive

    【讨论】:

    • 您写道:当您不知道分区键时,物化视图会更好。 但是,这与 Tyler Hobbs 在Jira 中所写的内容相矛盾:基础表的分区键通常也是 MV 分区键的不错选择。
    • 是的,但问题是,什么时候使用其中一个更好?物化视图的信息存储为一个新表,这导致Disk中的内存更多,二级索引仅将PK存储在“新表”中,并且该表仅存储在PK所在的节点中。这是我的观点,我支持上述文档,总之就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2023-04-08
    相关资源
    最近更新 更多