2

我有一些与 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)
);

我的使用查询将如下所示:

  • 获取所有行(id、value、createdate、updatedate),所以像这样的 CQL 就可以了 SELECT * FROM data

我正在使用 Astyanax,如何进行分页?我是否必须将分区器启用为保留顺序,以便我可以token(id)在范围值中使用来分页。

  • 获取具有更新范围的所有行,所以像这样的 CQL 就可以了 SELECT * FROM data where updatedate > startdate and updatedate < enddate

再次,我如何进行分页?

  • 获取所有具有创建范围的行,它类似于上面的问题,但我可以针对data_createdateCF运行 CQL。再次,我如何进行分页?

有什么建议和意见吗?非常感谢。

4

2 回答 2

1

通常,您希望避免需要遍历列族中的所有键的任何事情。就像在 RDBM 中一样,您应该只执行设置了正确索引的查询。

由于updatedatedata表的复合行键的一部分,因此您可以对该列使用范围查询来进行分页(不幸的是,如何在 Cassandra 中进行分页是一个非常复杂的主题)。这意味着您的两个第一个用例实际上是相同的。

我不太确定你所说的第三种情况是什么意思,你的意思是你想data用范围查询来查询行createdate- 例如SELECT * FROM data WHERE createdate > '20130206' AND createdate < '20130228'?我对您的第二张表 ( data_createdate) 及其适合的位置感到困惑。

如果您的意思是我认为您的意思,一种解决方案可能是向( )createdate列添加二级索引。您可以在文档中阅读有关二级索引的更多信息dataCREATE INDEX data_createdate_index ON data (createdate)

于 2013-02-06T20:18:15.843 回答
1

如果要实现分页,则尝试存储最后检索到的集合中的最后一个键,以便下次要获取下一页切片时,查询的入口点将是最后保存的键。建议您通过此链接 http://www.datastax.com/docs/1.2/cql_cli/using/paging

于 2013-02-06T12:09:41.517 回答