Cassandra count с ограничением - PullRequest
       0

Cassandra count с ограничением

0 голосов
/ 19 февраля 2020

Мне нужно выяснить, больше ли количество записей в таблице Кассандры, чем определенное число, например, 10000.

У меня все еще нет большого набора данных, но в большом масштабе, с возможными миллиардами записей, как я смогу добиться этого эффективно?

Потенциально могут быть миллиарды записей или только тысячи. Мне просто нужно знать, есть ли больше или меньше, чем 10K.

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

ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ ДАННЫХ ГДЕ sourceId = {id} И отметка времени <{endDate} И отметка времени> {startDate};

Я также мог бы сделать что-то вроде это:

SELECT * FROM data WHERE sourceId = {id} И отметка времени <{endDate} И отметка времени> {startDate} LIMIT 10000;

и количество в памяти

Я не могу использовать новую таблицу для подсчета, например, когда записывается новая запись, увеличить счетчик, эта опция недопустима.

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

sourceId - это ключ раздела, а метка времени - это ключ кластеризации.

Версия Cassandra - 3.11.4, и я работаю в Spring, если она имеет какое-либо отношение .

1 Ответ

0 голосов
/ 19 февраля 2020

Первый запрос:

SELECT COUNT(*) FROM data WHERE sourceId = {id} 
   AND timestamp < {endDate} AND timestamp > {startDate};

должен работать, если у вас есть таблица со следующим первичным ключом: (sourceId, timestamp, ...) - в этом случае операция агрегирования выполняется внутри одного раздела, поэтому она не будет включает в себя попадание нескольких узлов, и т. д. c. Он все еще может истечь, если у вас очень медленные диски и слишком много данных в заданном временном диапазоне.

Если у вас другая структура таблицы, вам нужно будет использовать что-то вроде Spark, которое будет считывать данные из Cassandra , выполнить фильтрацию и считать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...