【问题标题】:Cassandra CQL time range queryCassandra CQL时间范围查询
【发布时间】:2013-01-02 16:01:35
【问题描述】:

我有一个 Cassandra 列族,我每月存储大量(数十万个)事件,其中时间戳(“Ymdhisu”)作为行键。它有多个列,为每个事件捕获一些数据。我尝试检索特定时间范围的事件数据。例如对于一月份,我使用了以下 CQL 查询:

a) 2013 年 1 月 1-15 日范围内的查询

从 Test where Key > 20130101070100000000 和 Key

b) 2013 年 1 月 1-10 日范围内的查询

从 Test where Key > 20130101070100000000 和 Key

c) 2013 年 1 月 1 日至 2 月 2 日之间的查询

从 Test where Key > 20130101070100000000 和 Key

似乎范围搜索根本不起作用!我的 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 模式是什么?

【问题讨论】:

标签: nosql cassandra bigdata cql


【解决方案1】:

您可以创建二级索引,例如“日期”和“月份”,并将每个事件的日期和月份与其他数据一起存储在这些列中。查询数据时,您可以获取指定月份或日期的所有行。

我不认为 Keys 上的范围查询会起作用。也许如果您将分区器从 RandomPartitioner 更改为 ByteOrderedPartitioner?

【讨论】:

  • 感谢您的回复!我希望可以使用 Cassandra 时间戳进行时间范围查询,而不是添加静态列“日期”和“月份”。 Cassandra 更新每条记录的时间戳。这将节省我更新架构和使用 CQL 从我当前的数据库池中检索数据的额外成本。
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 2013-08-14
  • 2015-06-06
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 2012-01-09
相关资源
最近更新 更多