1

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

例如,在 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 上的某种索引。

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

4

1 回答 1

1

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

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

使用此模型,您可以使用当前日期(或某个已知日期)作为标记值,​​然后过滤名字和姓氏。您还可以使用复合列名称按时间戳获取一系列列。

于 2012-09-06T20:06:03.253 回答