2012-07-19 59 views
1

我正在使用由2个字符串Name1,Name2和时间戳组成的组合主键(例如'Joe:Smith:123456')。我想查询给定相等条件的时间戳范围Name1Name2组合键上的Cassandra二级索引?

例如,在SQL:

SELECT * FROM testcf WHERE (timestamp > 111111 AND timestamp < 222222 and Name2 = 'Brown');

SELECT * FROM testcf WHERE (timestamp > 111111 AND timestamp < 222222 and Name1 = 'Charlie);

从我的理解,复合密钥的第一部分是分区键,所以第二查询是可能的,但第一个查询将需要在Name2上的某种索引。

是否可以在组合键的组件上创建单独的索引?或者我在这里误解了什么?

回答

1

如果您想使用模式并支持第一个查询,则需要手动创建并维护名称索引。鉴于此要求,我质疑您在数据模型中的选择。您的模型应根据您的阅读模式进行设计。我认为你也存储了一些列值,以及你想通过时间戳查询。如果是这样,也许下面的模型将更好地为您服务:

"[current_day]:Joe:Smith" { 
    123456:Field1 : value 
    123456:Field2 : value 
    123450:Field1 : value 
    123450:Field2 : value 
} 

在这种模式下,你可以使用当前日(或一些已知日)定为定点值,然后在第一和最后一个名称进行筛选。您还可以使用复合列名称通过时间戳获取一系列的列。

相关问题