我有一个 Cassandra 列族,我每月存储大量(数十万)事件,时间戳(“Ymdhisu”)作为行键。它有多个列,为每个事件捕获一些数据。我尝试检索特定时间范围的事件数据。例如对于一月份,我使用了以下 CQL 查询:
a) 2013 年 1 月 1 日-1 月 15 日之间的查询
从测试中选择计数(*),其中 Key > 20130101070100000000 和 Key < 20130115070100000000 限制 100000;错误请求:开始键的 md5 排序在结束键的 md5 之后。这是不允许的;您可能根本不应该在 RandomPartitioner 下指定结束键
b) 2013 年 1 月 1 日-1 月 10 日范围内的查询
从测试中选择计数(*),其中 Key > 20130101070100000000 和 Key < 20130110070100000000 限制 100000;计数 - 73264
c) 2013 年 1 月 1 日至 2 月 2 日之间的查询
从测试中选择计数(*),其中 Key > 20130101070100000000 和 Key < 20130102070100000000 限制 100000;计数 - 78328
似乎范围搜索根本不起作用!我的 Columnfamily 的架构是:
Create column family Test with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type AND compression_options={sstable_compression:SnappyCompressor, chunk_length_kb:64};
要提取数据,有什么建议?我是否需要将密钥验证类重新定义为 TimeUUID 类型的架构?有没有其他方法可以在不更改架构的情况下有效地查询?我在这个列族中每月至少处理 100-200K 行数据。如果此模式不适用于此目的,那么存储和检索此处描述的数据类型的合适 Cassandra 模式是什么?