【发布时间】:2014-06-30 18:52:41
【问题描述】:
所以,我最初的问题是使用 token() 函数来翻阅 Cassandra 1.2.9 中的大型数据集,如下所述:Paging large resultsets in Cassandra with CQL3 with varchar keys
接受的答案使选择与令牌和块大小一起工作,但另一个问题出现了。
我的表格在 cqlsh 中是这样的:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
85.166.4.140 | municipality_alta | 2
85.166.4.140 | municipality_id_20441 | 2
93.89.124.241 | county_hedmark | 24
93.89.124.241 | county_id_20005 | 24
主键是 key 和 column1 的组合。在 CLI 中,相同的数据如下所示:
get ip['85.166.4.140'];
=> (counter=county_finnmark, value=4)
=> (counter=county_id_20020, value=4)
=> (counter=municipality_alta, value=2)
=> (counter=municipality_id_20441, value=2)
Returned 4 results.
问题
当使用限制为 100 的 cql 时,返回的结果可能会停在一条记录的中间,如下所示:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
将这些留给“行”(列):
85.166.4.140 | municipality_alta | 2
85.166.4.140 | municipality_id_20441 | 2
现在,当我对下一页使用 token() 函数时,会跳过这两行:
select * from ip where token(key) > token('85.166.4.140') limit 10;
结果:
key | column1 | value
---------------+------------------------+-------
93.89.124.241 | county_hedmark | 24
93.89.124.241 | county_id_20005 | 24
95.169.53.204 | county_id_20006 | 2
95.169.53.204 | county_oppland | 2
因此,前一个 IP 地址的最后两个结果没有任何痕迹。
问题
如何在不跳过 cql 行的情况下使用 token() 进行分页?比如:
select * from ip where token(key) > token(key:column1) limit 10;
【问题讨论】: