我正在为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 3.x 中的物化视图性能
这里是已知PK的地方,使用索引更有效
•Cassandra原生二级指数深潜