Cassandra seconday指数vs物化观点

时间:2017-02-10 12:02:50

标签: cassandra

我为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个值),可以更新,但很少。

那我应该选择什么?物化视图或索引?我知道具有低基数的索引是不好的选择,但我的查询总是包括分区键和限制,所以可能不是那么糟糕。

1 个答案:

答案 0 :(得分:10)

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

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

<强> 参考文献:

主要文章!

Cassandra Secondary Index Preview #1

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

Materialized View Performance in Cassandra 3.x

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

Cassandra Native Secondary Index Deep Dive