Quindi, il mio problema è stato originale utilizzando la funzione di memoria() alla pagina attraverso un grande insieme di dati in Cassandra 1.2.9, come spiegato e risposto qui: Paging large resultsets in Cassandra with CQL3 with varchar keysPaging gruppi di risultati di Cassandra con chiavi primarie composte - rinunciare a righe
La risposta accettata ha ottenuto la selezione che funziona con token e dimensioni del blocco, ma si è manifestato un altro problema.
Il mio tavolo si presenta così in 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
La chiave primaria è un composto di chiave e column1. Nel CLI, gli stessi dati è simile al seguente:
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.
Il problema
Quando si utilizza CQL con un limite di vale a dire 100, i risultati restituiti possono fermarsi nel bel mezzo di un record, in questo modo:
key | column1 | value
---------------+-----------------------+-------
85.166.4.140 | county_finnmark | 4
85.166.4.140 | county_id_20020 | 4
lasciando questi per "file" (colonne) su:
85.166.4.140 | municipality_alta | 2
85.166.4.140 | municipality_id_20441 | 2
Ora, quando uso la funzione di token() per la pagina successiva, come, queste due righe vengono saltati:
select * from ip where token(key) > token('85.166.4.140') limit 10;
Risultato:
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
Quindi, nessuna traccia degli ultimi due risultati da il precedente indirizzo IP.
Domanda
Come posso usare per memoria() per il paging senza saltare sopra le righe CQL? Qualcosa di simile:
select * from ip where token(key) > token(key:column1) limit 10;