我需要一些关于我的Cassandra模型的建议(时间序列)

时间:2014-01-21 18:40:28

标签: model cassandra time-series cql3

我正在研究一个带有nodejs和Cassandra(helenus模块)的API,我有一个类似下面的cassandra模型:

CREATE TABLE IF NOT EXISTS events (
  hour TIMESTAMP,
  type int,
  id timeuuid,
  created_at TIMESTAMP,
  invoice int,
  data text,
  PRIMARY KEY((hour, type), created_at) 
 )WITH CLUSTERING ORDER BY (created_at DESC);

现在,我有一个资源来搜索特定发票号的所有事件类型,因此当我执行类似下面的查询时,它会返回符合我条件的行。

select * 
from events  
WHERE hour = '2014-01-20 21:00:00' 
AND type IN (0,1,2)
AND invoice = 123456789 
ORDER BY created_at DESC LIMIT 15;

但是当我想从与特定发票号相关的时间开始获取所有行时,我遇到了麻烦,因为我的'小时'字段限制了我很多。

Cassandra有一个限制,你可以在条件语句中使用EQ和IN运算符作为分区键(小时,类型)。

什么是满足我需求的最佳模型?

感谢。

1 个答案:

答案 0 :(得分:0)

问题是您无法过滤Cassandra中的任意列。您需要提前知道您的查询,并设计您的架构以回答这些查询。假设您所声明的查询是您需要运行的唯一查询,您可以按如下方式修改主键:

PRIMARY KEY((hour, type), invoice, created_at)

这会将发票添加到列名称中以形成复合名称,并允许您运行查询。