Кассандра / Пикасса: получение случайных строк - PullRequest
3 голосов
/ 05 марта 2012

Есть ли возможность извлечь случайные строки из Кассандры (используя ее с Python / Pycassa)?

Обновление: со случайными строками я имею в виду случайно выбранные строки!

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Вы можете сделать это, сделав запрос get_range со случайным ключом start (просто случайная строка) и row_count, равным 1.

Из памяти, я думаю, ключ finish должен быть таким же, как и start, чтобы запрос «обвивал» пространство клавиш; это обычно возвращает все строк, но row_count ограничит это.

Не пробовал, но это должно гарантировать, что вы получите один результат, не зная точных ключей строк.

0 голосов
/ 03 декабря 2012

Это работает для моего случая:

ini = random.randint(0, 999999999)
rows = col_fam.get_range(str(ini), row_count=1, column_count=0,filter_empty=False)

Вам придется адаптироваться к вашему типу ключа строки (строка в моем случае)

0 голосов
/ 05 марта 2012

Не уверен, что вы подразумеваете под случайными строками. Если вы имеете в виду строки произвольного доступа, то наверняка вы можете сделать это очень легко:

import pycassa.pool
import pycassa.columnfamily

pool = pycassa.pool.ConnectionPool('keyspace', ['localhost:9160']
cf = pycassa.columnfamily.ColumnFamily(pool, 'cfname')
row = cf.get('row_key')

Это даст вам любой ряд. Если вы имеете в виду, что вы хотите случайно выбранную строку, я не думаю, что вы сможете сделать это очень легко, не зная, какие ключи. Вы можете сгенерировать индексную строку, а затем выбрать из этого случайный столбец и использовать его для получения строки из другого семейства столбцов. По сути, вам нужно создать новую строку, в которой каждое значение столбца представляет собой ключ строки из семейства столбцов, из которого вы пытаетесь выбрать строку. Затем вы можете случайно получить столбец из этой строки, и у вас есть ключ к случайной строке.

Я не думаю, что pycassa предлагает какую-либо поддержку для получения случайной неиндексированной строки.

...