CQL проверяет, существует ли запись

Я на пути к изучению Cassandra и различиям в CQL и SQL, но я замечаю отсутствие способа проверить, существует ли запись в Cassandra. В настоящее время лучший способ, который у меня есть, - использовать

SELECT primary_keys FROM TABLE WHERE primary_keys = blah, 

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


person Jim Pedid    schedule 24.12.2015    source источник


Ответы (3)


Это обычный способ в Cassandra проверить, существует ли строка. Возможно, вы не захотите возвращать все первичные ключи, если все, что вас волнует, это существует ли строка или нет, поэтому вы можете сделать это:

SELECT count(*) FROM TABLE WHERE primary_keys = blah, 

Это просто вернет 1, если строка существует, и 0, если она не существует.

person Jim Meyer    schedule 26.12.2015

Использование count заставит его пройти все совпадающие строки, чтобы иметь возможность их подсчитать. Но вам нужно проверить только один, поэтому просто ограничьте и верните все, что угодно. Тогда интерпретируйте наличие результата как true, а отсутствие - как false. Например.,

SELECT primary_keys FROM TABLE WHERE primary_keys = blah LIMIT 1
person Nikita Volkov    schedule 25.08.2016
comment
Если вы включите в запрос все столбцы первичного ключа, то не может быть более одного результата? - person OrangeDog; 26.08.2016
comment
Это самое эффективное решение - person Michal; 21.05.2019

Если вы используете первичный ключ для фильтрации строк, все вышеперечисленные 3 решения (включая ваше) подходят. И я не думаю, что есть реальные различия.

Но если вы используете общий способ (например, индексированный столбец, ключ раздела) для фильтрации строк, вам следует выбрать решение «Ограничение 1», которое позволит избежать бесполезного сетевого трафика.

Соответствующий пример можно найти по адресу: Лучший способ проверить наличие отфильтрованных строк в Cassandra? по заданному пользователем агрегату?

person Ying LEE    schedule 26.08.2016