2017-01-30 5 views
1

У меня есть ситуация, когда я не знаю, существуют ли данные в наборе таблиц. Итак, на данный момент я выпускаю DELETE на всех этих таблицах. Таким образом, один вызов API вызывает около 30-50 DELETE в Кассандре. В последнее время так происходит, что большая часть DELETE выдается по несуществующим данным. Будет ли производительность Cassandra по-прежнему отрицательно влиять из-за миллионов DELETE на данные, которых не существует? Должен ли я использовать «IF EXISTS» при удалении данных, которые я не уверен, существует ли он или нет?Cassandra УДАЛИТЬ с или без IF EXISTS

ответ

3

Лучше просто выпустить стандартное удаление без IF EXISTS, потому что в этом случае координатор начинает использовать последовательную согласованность и протокол paxos, который занимает больше времени и заставляет другие узлы запускаться партиями и т. Д. ЕСЛИ НЕ СУЩЕСТВУЕТ это легкая транзакция, и они следует использовать с 1% рабочей нагрузкой, а не с тем, что вы делаете регулярно.

Все еще вы не хотите иметь много надгробных камней (что делает удаление), так что это зависит от того, как вы моделируете свои данные и как вы их удаляете. Я буду более чем счастлив дать понять, если вы дадите некоторые схемы, вставляете и удаляете утверждения;)

+0

, так что у нас остались бы надгробные плиты (которые были моими первоначальными проблемами), если данных не существует? nevsv говорит иначе, поэтому хотел подтвердить. – nimblerex

+0

если есть «если не существует». там не было бы надгробного камня ... но будьте осторожны с этим, потому что с надгробными камнями вы будете в безопасности, если будете моделировать свои данные o.k. ... но с, если не существует, вы переходите к каждому узлу кластера и добавляете значительную нагрузку на узел координатора. Используйте, если не существует, только если это 1% рабочей нагрузки или меньше. –

+0

Только что проверили, что DELETE составляет около 55% наших запросов. Мы планируем пересмотреть нашу схему :) Спасибо за ваш вклад. – nimblerex

0

IF EXISTS будет просто терпеть неудачу, если строка не существует.

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

 Смежные вопросы

  • Нет связанных вопросов^_^