【问题标题】:I need some advice for my Cassandra model (time-series)我需要一些关于我的 Cassandra 模型的建议(时间序列)
【发布时间】:2014-02-11 12:58:06
【问题描述】:

我正在使用 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 运算符作为分区键(小时、类型)。

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

谢谢。

【问题讨论】:

    标签: model cassandra time-series cql3


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2021-12-11
      • 2011-04-05
      相关资源
      最近更新 更多