Операция удаления DSE Cassandra 3.x - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть таблица с ПЕРВИЧНЫМ КЛЮЧОМ ((A, B), C) Ключ раздела (A, B) Ключ кластеризации C

Мой вопрос связан с удалением из этой таблицы.

Эффективно ли использовать предложение IN при удалении или выдавать несколько операторов удаления с помощью операции равенства.

delete from table where A=xx and B IN ('a','b','c');

-OR-

delete from table where A=xx and B='a';
delete from table where A=xx and B='b';
delete from table where A=xx and B='c';

Есть ли вред виспользуя оператор IN, как в первом операторе удаления.Всего может быть до 20 удалений (или 20 пунктов в предложении IN).

Заранее благодарим за помощь!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

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

С другой стороны, если удаление выполняется как часть пакетного или очистного заданияи никого на самом деле не волнует, сколько времени это займет, тогда вы, вероятно, можете обойтись без использования IN.Хитрость заключается в том, чтобы удержать его от тайм-аута (и, как указал Крис, наложить чрезмерную нагрузку на узел).Возможно, имеет смысл разбить ваши группы значений для столбца B, чтобы они оставались небольшими.Хотя 20 пунктов списка с IN не являются большинством , я слышал, что кто-то пытался, это определенно больше, чем я когда-либо использовал бы лично (я постарался бы сделать его меньше 10).

По сути, использование оператора IN с DELETE будет восприимчиво к проблемам с производительностью, так же, как это было бы на SELECT, как описано в этом ответе (включен сюда для справки):

Является ли отношение IN в Кассандре плохим для запросов?

0 голосов
/ 08 февраля 2019

За небольшим исключением, почти всегда лучше использовать 2-й вариант множественного удаления, выдаваемый асинхронно.Координатор предложения IN будет сильно загружен, в то время как последний будет равномерно распределять нагрузку.Кроме того, с помощью балансировщика нагрузки TokenAware запросы будут направляться непосредственно в правильные реплики и могут выполняться довольно быстро.Если вы делаете сотни или более удалений, вы можете использовать семафор или что-то еще, хотя для ограничения количества удалений в полете, просто чтобы предотвратить перегрузку кластера.

...