Cassandra seconday指数vs物化观点

gor*_*uta 10 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))
Run Code Online (Sandbox Code Playgroud)

这是我使用的主要查询:

SELECT * FROM activity WHERE userid = ? AND remoteid = ?;
SELECT * FROM activity WHERE userid = ? AND type = ? AND LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

现在我需要visibility在第二个查询上添加列.所以,根据我所学到的,我可以在二级索引物化视图之间进行选择.这是事实:

  • 这里我每个用户有一个分区,里面有数千行(活动).
  • 总是在我的所有查询中使用分区键(userid)来访问数据.
  • 全球活动数量达到3000万,成长期不断增加.
  • visibility 列具有低基数(仅3值)并且可以更新,但很少.

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

Her*_*gon 11

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

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

参考文献:

主要文章!

Cassandra Secondary Index Preview#1

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

Cassandra 3.x中的物化视图性能

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

Cassandra Native Secondary Index Deep Dive