Подсчет столбцов, очень медленные операции CountQuery и SliceQuery - PullRequest
1 голос
/ 13 сентября 2011

Я написал программу «переписи», чтобы перебирать все строки в семействе столбцов и в каждой строке подсчитывать столбцы, записывая максимальное значение и ключ строки. Я проводил больше времени с клиентом Hector, но также написал клиент Pelops для тестирования.

Основной поток состоит в том, чтобы использовать RangeSlicesQuery для итераций по строкам, а затем в каждой строке использовать SliceQuery для итерации и сбора статистики. Работает аналогично в Pelops, просто разные API. Недостатком является необходимость делать буферизацию вручную, выбирая размеры буфера для строк и столбцов ... Мои текущие данные - 12 миллионов строк, с наибольшим числом столбцов ~ 25K, так что да, требуется время ... в моей текущей конфигурации я получаю > 25K строк в секунду.

В поисках путей улучшения и обнаружения CountQuery Гектора (который, как я предполагаю, использует Thrift-клиент get_count ()). Думая, что было бы быстрее просто итерировать ключи (используйте RangeSlicesQuery.setReturnKeysOnly ()), а затем повторно использовать CountQuery для каждого ключа строки, я пересмотрел код.

Не только медленнее, но и в 30 раз медленнее! (обрабатывается только 900 строк в секунду) ...

Есть ли лучший способ подсчета столбцов?

1 Ответ

1 голос
/ 14 сентября 2011

Не уверен, что происходит с Гектором - я ожидаю, что он будет примерно в 2 раза медленнее, а не в 30 раз медленнее.

В целом, сохранение денормализованного счета с использованием столбца счетчика, вероятно, лучше, чем полноеСканирование CF: http://www.datastax.com/dev/blog/whats-new-in-cassandra-0-8-part-2-counters

...