【发布时间】:2015-12-27 06:10:45
【问题描述】:
这个问题我希望不要在通常的“二级索引与聚类键”问题中得到回答。
这是我的一个简单模型:
CREATE TABLE ks.table1 (
name text,
timestamp int,
device text,
value int,
PRIMARY KEY (md_name, timestamp, device)
)
基本上我将我的数据视为名称为name 的数据集,每个数据集都是一种包含value 的稀疏二维矩阵(行=timestamps,列=device)。
由于问题和查询可能是相当对称的(即我的“矩阵”是最好的表示,还是我应该使用转置的“矩阵”)我无法轻易决定我应该首先放置哪个集群键。我这样做的方式更有意义:对于每个时间戳,我都有一组数据(在该时间戳出现的每个设备的值)。
那么通常的查询是
select * from cycles where md_name = 'xyz';
它以单个分区为目标,这将非常快速、简单。如果有大量数据,我的用户可以这样做:
select * from cycles where md_name = 'xyz' and timestamp < n;
但是我希望能够“转置”问题并这样做:
select * from cycles where md_name = 'xyz' and device='uvw';
这意味着我必须在 device 上创建二级索引。
但是(这就是问题开始的地方”),这个索引与通常的索引有点不同,因为它用于单个分区内的查询。创建索引允许在多个分区上执行相同的操作:
select * from cycles where device='uvw'
在我的情况下这不是必需的。
- 我能否改进我的模型以支持此类查询而无需过多重复?
- 是否有类似“分区索引”之类的东西?
【问题讨论】:
标签: cassandra