2014-02-18 4 views
0

Как упрощают работу следующие инструкции в улучшении эффективности программы при обработке большого количества строк, скажем 500 миллионов.get_range в случайном и упорядоченном разделителе

Случайная Разметка:

get_range() 

Заказанная Разметка:

get_range(start='rowkey1',finish='rowkey10000') 

Кроме того, сколько строк может быть обработана в то время, при использовании get_range для заказанного секционирования с семьей колонны, имеющей более миллиона строк ,

Благодаря

ответ

1

EDIT: Тайлер Hobbs указывает в своем комментарии, что этот ответ не относится к водителю pycassa. По-видимому, он уже заботится обо всем, что я упоминал ниже.

==========

Если ваш вопрос, можно ли выбрать все строки 500M сразу с get_Range(), то ответ «нет», потому что Cassandra будет работать из памяти пытаясь ответить на ваш запрос.

Если у вас есть вопрос, можете ли вы запросить Cassandra для всех строк в партиях по N строк за раз, если случайный разделитель используется, тогда ответ будет «да». Разница в использовании сохраняющего порядок разделителя заключается в том, что вы не знаете, каким будет первый ключ для вашей следующей партии, поэтому вам нужно использовать последний ключ вашей текущей партии в качестве стартового ключа и игнорировать строку при повторении новой партия. Для первой партии просто используйте «пустую» клавишу в качестве ограничений диапазона клавиш. Кроме того, нет способа сказать, насколько вы относились к относительным условиям, просмотрев ключ, который был возвращен, так как порядок не сохраняется.

Что касается количества строк: Начать небольшой. Скажите 10, затем попробуйте 100, затем 1000. В зависимости от количества столбцов, на которые вы смотрите, размеров индекса, доступной кучи и т. Д., Вы увидите заметное ухудшение производительности для одного запроса за пределами определенного порога.

+0

Ральф, ваши точки правильны, когда речь идет о методе '' get_range() 'сырой Thrift', но '' get_range() '' pycassa обрабатывает все эти точки. Он прозрачно разбивает запрос на куски по 1024 строки по умолчанию. Это можно изменить с помощью параметра buffer_size. Он также правильно продвигает start_key для каждого из подзапросов, независимо от разделителя. –

1

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

Метод pycassa's get_range() будет работать нормально с любым количеством строк, потому что он автоматически разбивает запрос на более мелкие куски. Однако ваше приложение должно правильно использовать метод. Например, если вы делаете что-то вроде:

rows = list(cf.get_range()) 

Возможно, у вашей программы python закончится память. Правильный способ его использования:

for key, columns in cf.get_range(): 
    process_data(key, columns) 

Этот метод по умолчанию использует только 1024 строки за раз. При необходимости вы можете уменьшить это значение с помощью параметра buffer_size до get_range().