cassandra分页和哈希数

时间:2013-10-09 13:11:09

标签: hash cassandra paging

我想在cassandra中使用切片查询,如下所示:

create table users (KEY varchar PRIMARY KEY, data varchar);
insert into users (KEY, 'data') values ('1', 'one');
insert into users (KEY, 'data') values ('2', 'two');
insert into users (KEY, 'data') values ('3', 'three');
insert into users (KEY, 'data') values ('4', 'four');
select * from users;
  3 | three
  2 |   two
  1 |   one
  4 |  four
select * from users LIMIT 1;
  3 | three
select * from users WHERE KEY > '3' LIMIT 1;
  2 |  two
select * from users WHERE KEY > '2' LIMIT 1;
  1 |  one
select * from users WHERE KEY > '1' LIMIT 1;
  4 | four

在这个示例中,partitioner是有序的。但是我的分区器是无序的。所以我使用这样的查询:

select * from users WHERE token(KEY) > token('3') LIMIT 3;

如果我想访问所有行,我必须从具有最低哈希值的密钥开始查询。 有没有办法找到最低哈希值的密钥?如果不是有更好的方法来分页表行吗?

感谢您的帮助:)

编辑:

现在我有另一个问题。只在分区键上支持.token函数。在我的cf主键中复合为(word,docid)。例如我有severel word = hi.and当我使用查询像select时*来自用户WHERE标记(单词)>令牌('hi')LIMIT 3;它从我的cf中的最后一个hi开始,这样一些word = hi的行被忽略了。

1 个答案:

答案 0 :(得分:0)

您的第一个查询可能没有WHERE,它将返回按哈希排序的第一个键。然后,您可以使用下一个查询中返回的最后一个键。

你也可以使用token(''),它评估最低标记,即

select * from users WHERE token(KEY) > token('') LIMIT 3;

将返回由令牌排序的前3个键,相当于

select * from users LIMIT 3;

您还可以在Cassandra 2.0中使用新的自动分页(参见CASSANDRA-4415)。