gpt4 book ai didi

cassandra - 具有复合主键的Cassandra中的分页结果集-行中丢失

转载 作者:行者123 更新时间:2023-12-04 08:25:18 27 4
gpt4 key购买 nike

因此,我最初的问题是使用token()函数分页浏览Cassandra 1.2.9中的大数据集,如此处所解释和回答的:Paging large resultsets in Cassandra with CQL3 with varchar keys

可以接受的答案是使用 token 和块大小的选择,但是另一个问题却显现出来。

我的表在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;

最佳答案

好的,所以我使用了这篇文章中的信息来制定解决方案:
http://www.datastax.com/dev/blog/cql3-table-support-in-hadoop-pig-and-hive
(“CQL3分页”部分)。

首先,我执行以下cql:

select * from ip limit 5000;

从结果集中的最后一行中,我得到了键(即'85 .166.4.140')和column1中的值(即'county_id_20020')。

然后,我创建一个准备好的语句,以评估
select * from ip where token(key) = token('85.166.4.140') and column1 > 'county_id_20020' ALLOW FILTERING;

(我猜想它也可以在不使用token()函数的情况下工作,因为现在检查是否等于:)
select * from ip where key = '85.166.4.140' and column1 > 'county_id_20020' ALLOW FILTERING;

现在,结果集包含此IP的其余X行(列)。然后,该方法返回所有行,并且对该方法的下一次调用包括上次使用的键('85 .166.4.140')。使用此键,我可以执行以下选择:
select * from ip where token(key) > token('85.166.4.140') limit 5000;

这给了我来自“85.166.4.140”之后的第一个IP(包括该IP)的接下来的5000行。

现在,分页中不会丢失任何列。

更新

Cassandra 2.0引入了自动分页,由客户端处理。
更多信息在这里: http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0

(请注意,setFetchSize是可选的,分页正常工作不是必需的)

关于cassandra - 具有复合主键的Cassandra中的分页结果集-行中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com