Что эквивалентно CQL count () в драйвере Java - PullRequest
1 голос
/ 21 октября 2019

Я хочу выполнить следующий запрос, используя драйвер Java. В CQL, чтобы найти количество разделов, я могу сделать select count(*) from table where field1 = “x” ;. Что эквивалентно count() в QueryBuilder? Пока что найти нет. из возвращенных строк я использовал

val resultSet = session.execute(partitionSizeQuery)
/*is this the most efficient way to find the size of ResultSet??*/
val resultSetSize = resultSet.all.size

, где Query равен QueryBuilder.select().from(tableName).where(QueryBuilder.eq("field1", somevalue)). Но я не уверен, что это правильный путь

1 Ответ

3 голосов
/ 21 октября 2019

Эквивалент count () в построителе запросов равен QueryBuilder.select().countAll(). Вместо этого я бы просто перебрал resultSet и увеличил счетчик, так как он будет пролистывать медленнее, в то время как count выполняет некоторые внутренние операции, которые могут разложить запрос, который может превратиться в тысячи внутренних запросов (очень дорого). Итерирование по resultSet лучше, чем all, поэтому он не будет пытаться загрузить всю вещь в память, если она вынуждена разбивать на страницы (result> fetchsize).

Использование count очень дорого, и в некоторых случаях выможно ожидать тайм-аута. Поэтому, особенно если это то, что можно часто вызывать, вы должны избегать этого.

Рассматривали ли вы использование другой таблицы для отслеживания добавленных вами записей? Дополнительный бухгалтерский учет - это больше работы, но он приведет к эффективным запросам.

Если есть TTL или что-то, что затрудняет отслеживание, вы также можете использовать задание (то есть, запустить или выполнить итерацию, как описано выше), чтобыпросто сохраняйте вторую таблицу «count» и просто не обновляйте ее постоянно.

...