我想将一些编码的'数据'存储到cassadra中,由timestamp版本化。我的暂定架构是:
CREATE TABLE items (
item_id varchar,
timestamp timestamp,
data blob,
PRIMARY KEY (item_id, timestamp)
);
我希望能够返回项目列表,只返回每个item_id的最新(最高时间戳);是否可以使用此架构?
答案 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或某些东西。