我有一些与Cassandra相关的问题:
我必须存储一些数据(大约10M行)(比方说一个自然键 - 可排序,更新时间戳,createDate(仅限YYYYMMDD)和值字段。我打算创建以下CF
CREATE TABLE data (
id text,
createdate text,
updatedate timeuuid,
value text,
PRIMARY KEY (id, updatedate)
);
CREATE TABLE data_createdate (
id text,
createdate text,
value text,
PRIMARY KEY (id, createdate)
);
我的使用情况查询将如下:
SELECT * FROM data
我正在使用Astyanax,我该如何进行分页?我是否必须按顺序保留分区程序,因此我可以在范围值中使用token(id)
来翻页。
SELECT * FROM data where updatedate > startdate and updatedate < enddate
同样,我该如何进行分页?
data_createdate
CF运行CQL。再次,我该如何进行分页?有任何建议和意见吗?非常感谢。
答案 0 :(得分:1)
如果要实现分页,请尝试存储上次检索到的集合中的最后一个密钥,以便下次要获取下一个页面切片时,查询的入口点将是最后保存的密钥。建议你通过这个链接 http://www.datastax.com/docs/1.2/cql_cli/using/paging。
答案 1 :(得分:1)
通常,您希望避免任何需要迭代列族中所有键的内容。就像在RDBM中一样,您应该只进行具有正确索引设置的查询。
由于updatedate
是data
表的复合行键的一部分,因此您可以对该列使用范围查询来进行分页(确切地说,如何在Cassandra中进行分页是一个非常复杂的主题,不幸的是)。这意味着您的两个第一个用例实际上是相同的。
我不确定你的意思是第三种情况,你的意思是你想在data
中使用createdate
的范围查询来查询行 - 例如SELECT * FROM data WHERE createdate > '20130206' AND createdate < '20130228'
?我对你的第二张桌子(data_createdate
)以及它适合的位置感到困惑。
如果您的意思是我认为您的意思是一个解决方案可能是在createdate
(data
)的CREATE INDEX data_createdate_index ON data (createdate)
列中添加辅助索引。 You can read more about secondary indexing in the documentation