Пагинация Cassandra: Как использовать get_slice для запроса базы данных Cassandra 1.2 из Python с использованием библиотеки cql

У меня есть кластер Cassandra 1.2, и яиспользуя его из Python, используя библиотеку cql. Теперь мне нужно реализовать некоторые функции подкачки, которые кажутся довольно простыми с помощью get_slice, но я могуне могу найти какую-либо документацию о том, как использовать что-то подобное из библиотеки cql:

get_slice("key" : table_key,
      "column_parent" : {"column_family" : "MyColumnFamily"},
      "predicate" :
       { "slice_range" : 
 { "start" : "SomeStartID", 
 "end" : "Z", 
 "reverse" : "false", 
 "count : "100" }
 } )

мы видели этот тип синтаксиса в случайной документации для get_slice, и он неЭто не похоже на синтаксис CQL 3, как я могу выполнить этот тип запросов из Python в кластер Cassandra 1.2?

Заранее спасибо!

 JnBrymn23 июл. 2013 г., 23:32

Ответы на вопрос(2)

Обновление для современных версий Cassandra. Все собственные драйверы CQL3 могут использовать подкачку на стороне сервера (начиная с Cassandra 2.0), поэтому вам больше не нужно настраивать их вручную.

 wolfdawn06 авг. 2015 г., 17:18
Можете привести пример?
 Justin25 мар. 2015 г., 06:22
Можете ли вы объяснить, как добиться нумерации страниц с использованием CQL3?
 Zanson27 мар. 2015 г., 16:24
Используйте один из текущих драйверов CQL3, и они делают это автоматически.
Решение Вопроса

Вы можете сделать пейджинг практически таким же образом: установить лимит и начать с имени столбца, которое больше предыдущего. В качестве примера я создал таблицу test1 в пространстве ключей ks1:

CREATE TABLE test1 (
  a text,
  b text,
  PRIMARY KEY (a, b)
)

Здесь a - мой ключ строки, а b - имя столбца. Затем я вставил 12 записей с a = a и b от a до l. Так

cqlsh:ks1> select * from test1;

 a | b
---+---
 a | a
 a | b
 a | c
 a | d
 a | e
 a | f
 a | g
 a | h
 a | i
 a | j
 a | k
 a | l

Затем я разбирал страницы с этим питоном, используя драйвер CQL:

import cql
con = cql.connect('localhost', keyspace='ks1', cql_version='3.0.0')
cursor = con.cursor()
last = ""
while last != None:
    cursor.execute("select * from test1 where a=:a and b>:b limit 5", {"a": "a", "b": last})
    last = None
    for row in cursor:
        print row
        last = row[1]

какие страницы в пакетах по 5. Вывод:

[u'a', u'a']
[u'a', u'b']
[u'a', u'c']
[u'a', u'd']
[u'a', u'e']
[u'a', u'f']
[u'a', u'g']
[u'a', u'h']
[u'a', u'i']
[u'a', u'j']
[u'a', u'k']
[u'a', u'l']
 Richard07 июн. 2013 г., 09:44
Вы можете't не использовать в get_slice reverse для пейджинга, все, что он может сделать, это получить последние N столбцов, а не первый. Вы можете делать обратные запросы в CQL с помощью ORDER BY.
 Sergio Ayestarán06 июн. 2013 г., 18:28
Конечно, вы можете сделать это, но функциональность get_slice имеет "задний ход" чтобы позволить вам получить следующую / предыдущую страницу, которая "что-то яМне действительно интересно. Есть ли способ сделать это, используя простой CQL 3 и не сохраняя предыдущие ключи?
 JnBrymn23 июл. 2013 г., 23:32
вмой связанный вопрос как бы вы продлили свой результат в случае, если ПЕРВИЧНЫЙ КЛЮЧ является тройным (или более)?

Ваш ответ на вопрос