如何从Cassandra的时间序列中选择最后一条记录?

时间:2014-02-13 13:03:15

标签: nosql cassandra

我想将一些编码的'数据'存储到cassadra中,由timestamp版本化。我的暂定架构是:

CREATE TABLE items (
  item_id varchar,
  timestamp timestamp,
  data blob,
  PRIMARY KEY (item_id, timestamp)
); 

我希望能够返回项目列表,只返回每个item_id的最新(最高时间戳);是否可以使用此架构?

1 个答案:

答案 0 :(得分:1)

无法在此表的单个CQL语句中表达此类查询,因此答案为否。

您可以尝试创建另一个表格,例如latest_items,只存储最后一次更新,因此架构为:

CREATE TABLE latest_items (
  item_id varchar,
  timestamp timestamp,
  data blob,
  PRIMARY KEY (item_id)
); 

如果以时间戳顺序插入行,则表格自然只包含每个项目的最新行。然后你可以运行select * from latest_items limit 10000000;。这当然是昂贵的,因为你提取所有行,但根据你的要求,你真正想要所有的行,没有办法避免它。

第二个表涉及复制您的数据,但这是Cassandra的常见主题。您可以通过间接存储它来避免重复blob,即作为路径或URL或某些东西。