我正在研究一个带有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运算符作为分区键(小时,类型)。
什么是满足我需求的最佳模型?
感谢。
答案 0 :(得分:0)
问题是您无法过滤Cassandra中的任意列。您需要提前知道您的查询,并设计您的架构以回答这些查询。假设您所声明的查询是您需要运行的唯一查询,您可以按如下方式修改主键:
PRIMARY KEY((hour, type), invoice, created_at)
这会将发票添加到列名称中以形成复合名称,并允许您运行查询。