Vì vậy, vấn đề ban đầu của tôi là sử dụng hàm token() để trang qua một tập dữ liệu lớn trong Cassandra 1.2.9, như được giải thích và trả lời tại đây: Paging large resultsets in Cassandra with CQL3 with varchar keysKết quả phân trang trong Cassandra với các khóa chính ghép - Thiếu hàng trên
Câu trả lời được chấp nhận có lựa chọn làm việc với mã thông báo và kích cỡ đoạn văn, nhưng một vấn đề khác thể hiện chính nó.
bảng của tôi trông như thế này trong 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
Mấu chốt chính là một hỗn hợp của chính và column1. Trong CLI, cùng một dữ liệu trông như thế này:
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.
Vấn đề
Khi sử dụng CQL với một giới hạn tức là 100, kết quả trả về có thể dừng ở giữa một kỷ lục, như thế này:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
rời này để "hàng" (cột) ra:
85.166.4.140 | municipality_alta | 2
85.166.4.140 | municipality_id_20441 | 2
Bây giờ, khi tôi sử dụng thẻ() chức năng cho trang tiếp theo như thế nào, hai hàng này đang bị bỏ qua:
select * from ip where token(key) > token('85.166.4.140') limit 10;
Kết quả:
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
Vì vậy, không có dấu vết của hai kết quả cuối cùng từ địa chỉ IP trước đó.
Câu hỏi
Làm thế nào tôi có thể sử dụng thẻ() cho phân trang mà không bỏ qua các hàng CQL? Một cái gì đó như:
select * from ip where token(key) > token(key:column1) limit 10;