Hash cassandra分页和散列数

Hash cassandra分页和散列数,hash,cassandra,paging,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'); ins

我想在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
select * from users WHERE token(KEY) > token('3') LIMIT 3;
在本例中,分区是有序的。但我的分区是无序的。因此我使用如下查询:

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
select * from users WHERE token(KEY) > token('3') LIMIT 3;
若我想访问所有行,我必须从散列数最低的键开始查询。 有没有办法找到散列数最少的密钥?若并没有,是否有更好的方法来分页表行

谢谢你的帮助:)

编辑:


现在我有另一个问题。令牌函数仅在分区键上受支持。在我的cf中,主键是复合键(word,docid)。例如,我有severel word=hi。当我使用select*之类的查询时,其中令牌(word)>token('hi')限制为3;它从my cf中的最后一个hi开始,这样一些word=hi的行就被忽略了。

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

您还可以使用
标记(“”)
,其计算结果为最低标记,即

select * from users WHERE token(KEY) > token('') LIMIT 3;
将返回按令牌排序的前3个密钥,相当于

select * from users LIMIT 3;

您还可以使用Cassandra 2.0中新的自动分页功能(请参阅)。

谢谢您的帮助。但现在我有另一个问题。令牌函数仅在分区键上受支持。在我的cf中,主键是复合的(word,docid)。例如,我有severel word=hi。当我使用select*之类的查询时,其中令牌(word)>token('hi')限制3;它从我的cf中的最后一个hi开始,这样一些word=hi的行就被忽略了。您可以在该行内进行限制,但听起来Cassandra 2.0中的自动分页功能可以满足您的需要。您能否解释更多关于Cassandra中的自动分页功能?您可以从用户处运行
select*并读取结果。在后台,它会为您分页结果,这样您就不需要将所有结果存储在内存中,并且您可以在结果仍然出现时开始处理。这是自动的!但你需要卡桑德拉2.0。