3
我正在建模我的表卡桑德拉3.0+。我们的目标是构建一个存储用户的活动,这里是我到目前为止已经做了一个表: (用户ID来自另一个数据库MySQL的)卡桑德拉seconday索引vs物化视图
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个值),可以更新,但很少。
那么,我应该选择什么?物化视图或索引?我知道低基数的索引是不好的选择,但我的查询总是包含分区键和一个限制,所以也许并不是那么糟糕。
你写道:*当你不知道分区键时,物化视图会更好*但是,这与Tyler Hobbs在[Jira]中写的东西相矛盾(https://issues.apache.org/jira/browse/CASSANDRA-10226 ):*基本表的分区键通常也是MV分区键的不错选择。* – Jubobs
是的,但问题是,什么时候使用其中一个更好? 物化视图信息作为新表存储,这会导致磁盘中的内存更多,次级索引仅将PK存储在“新表”中,并且此表仅存储在PK的节点中。 这是我的观点,并且我总体上支持上述文档。 – HerberthObregon