Я написал программу «переписи», чтобы перебирать все строки в семействе столбцов и в каждой строке подсчитывать столбцы, записывая максимальное значение и ключ строки. Я проводил больше времени с клиентом Hector, но также написал клиент Pelops для тестирования.
Основной поток состоит в том, чтобы использовать RangeSlicesQuery для итераций по строкам, а затем в каждой строке использовать SliceQuery для итерации и сбора статистики. Работает аналогично в Pelops, просто разные API. Недостатком является необходимость делать буферизацию вручную, выбирая размеры буфера для строк и столбцов ... Мои текущие данные - 12 миллионов строк, с наибольшим числом столбцов ~ 25K, так что да, требуется время ... в моей текущей конфигурации я получаю > 25K строк в секунду.
В поисках путей улучшения и обнаружения CountQuery Гектора (который, как я предполагаю, использует Thrift-клиент get_count ()). Думая, что было бы быстрее просто итерировать ключи (используйте RangeSlicesQuery.setReturnKeysOnly ()), а затем повторно использовать CountQuery для каждого ключа строки, я пересмотрел код.
Не только медленнее, но и в 30 раз медленнее! (обрабатывается только 900 строк в секунду) ...
Есть ли лучший способ подсчета столбцов?