Есть ли возможность получить случайные строки из Cassandra (используя ее с Python/Pycassa)?
Обновление: под случайными строками я подразумеваю случайно выбранные строки!
Есть ли возможность получить случайные строки из Cassandra (используя ее с Python/Pycassa)?
Обновление: под случайными строками я подразумеваю случайно выбранные строки!
Возможно, вы сможете сделать это, выполнив запрос get_range
со случайным ключом start
(просто случайная строка) и row_count
из 1.
По памяти я думаю, что ключ finish
должен быть таким же, как start
, чтобы запрос «обтекал» пространство ключей; обычно возвращаются все строки, но row_count
ограничивает это.
Не пробовал, но это должно гарантировать, что вы получите один результат, не зная точных ключей строк.
get_range
с новым случайным стартовым ключом каждый раз... это должно выбирать строку из случайной точки в кольце пространства ключей.
- person DNA; 05.03.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 предлагает какую-либо поддержку для захвата случайной неиндексированной строки.
Это работает для моего случая:
ini = random.randint(0, 999999999)
rows = col_fam.get_range(str(ini), row_count=1, column_count=0,filter_empty=False)
Вам придется адаптироваться к типу ключа строки (строка в моем случае)