Как получить общее количество строк в семействе столбцов Кассандры, используя Java? - PullRequest
0 голосов
/ 18 марта 2019

Я хочу получить общее количество строк в семействе столбцов. Я знаю, что с помощью nodetool cfstats мы можем получить приблизительно строки. Но как получить его с помощью Java Client.

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Вы можете запросить таблицу system.size_estimates, чтобы получить приблизительные размеры разделов предварительного диапазона на одном хосте. По размеру вашего кластера и вашей RF вы можете сделать из этого оценку парка шаров. Это действительно зависит от того, насколько точно вы этого хотите. Для точных измерений я бы порекомендовал Spark, но если вам что-то действительно нужно для отслеживания времени его выполнения, возможно, стоит использовать счетчик, который вы обновляете с изменениями, чтобы быстро иметь возможность считывать данные.

0 голосов
/ 19 марта 2019

Как упоминал Крис, вы можете получить приблизительное количество строк с помощью метрик JMX, и Spark может сделать более точный расчет.Если вам нужно сделать это через Java-клиент, вам нужно будет выполнить операцию, аналогичную Spark, - выполнить подсчет строк по диапазонам токенов - в этом случае вы выполняете запросы, которые выполняются отдельными хостами, безПерегрузка координатора, как это происходит, если вы делаете наивный select * from table.Запрос выглядит так ( это псевдокод, а не реальный запрос! ) SELECT columns FROM table WHERE token(pk) > token_range.begin AND token(pk) <= token_range.end.Уловка, которая должна быть сделана здесь, состоит в том, что вам нужно явно установить ключ маршрутизации, так как политика балансировки нагрузки с учетом токенов не может автоматически извлечь его из этого запроса.

Полный исходный код довольно длинный, чтобы включать его здесь, но вы можете найти его здесь .

0 голосов
/ 18 марта 2019

Единственный способ, которым я смог это сделать, - это написать код, который по существу выполняет «select * from», а затем извлекает небольшие строки за раз.Счетчик фактически поддерживается кодом Java, а не кассандрой.К сожалению, у cassandra таймауты считывания невелики (5 секунд для одного / local_one и 10 секунд для всего остального).Вы должны уменьшить размеры выборки, чтобы время ожидания не уменьшалось.Если таблица огромна, это может занять некоторое время, чтобы завершить подсчет, но это работает.Имейте в виду, что число может изменяться во время выполнения вашего запроса, поэтому он сам по себе является «оценочным».У меня есть модульный кусок кода Java, если вам интересно.

...