Кассандра: Удаление всего раздела создает надгробную плиту?

Я новичок в Кассандре. У меня была ситуация, когда выполняется удаление для каждого раздела. Создает ли удаление всего раздела надгробия? Сейчас место не освобождается после удаления.


person Akbar Badhusha    schedule 18.01.2021    source источник


Ответы (3)


Да, удаление всего раздела создает особый тип захоронения, который скрывает все данные в разделе. Но, как и другие надгробия, он хранится в течение gc_grace_seconds и только после этого собирается.

Существует отличный пост в блоге от «Последний огурец», подробно объясняющий надгробные плиты

person Alex Ott    schedule 18.01.2021
comment
Есть ли способ полностью избежать надгробий? мы планировали полное удаление для определенного раздела [данные, которые больше не нужны] - person Akbar Badhusha; 18.01.2021
comment
Нет — надгробия — это путь, Cassandra и другие распределенные системы следят за тем, чтобы данные действительно удалялись, а не воскресали. Вы можете сократить цикл, если вы убедитесь, что все данные восстановлены, затем вы временно уменьшите gc_grace_seconds, выполните уплотнение и восстановите gc_grace_seconds - но вам действительно нужно убедиться, что данные восстановлены до и после этого - person Alex Ott; 18.01.2021

Как уже упоминалось, вы можете обновить gc_grace_seconds до 0, но я бы не рекомендовал этого делать, если у вас нет только одного узла в вашем кластере или ваш RF = 1. Вы можете попытаться уменьшить отсрочку GC до приемлемого для вас времени. Я хотел бы указать максимальное время, которое, по моему мнению, узел Cassandra может оставаться отключенным.

Другой вариант немедленного освобождения места — изменить модель данных, чтобы использовать усечение/удаление. Например, если вам нужны данные только за 24 часа, вы можете создать одну таблицу в день и в какой-то момент удалить таблицы, которые вам не нужны.

person Chris    schedule 21.01.2021

Я сделал тест с вставкой новых данных после удаления тем же ключом раздела.

create table message_routes (
  user_id bigint,
  route_id bigint,
  primary key ((user_id), service_id)
)
  1. insert into message_routes (user_id, route_id) values (1, 2)

  2. delete from message_routes where user_id = 1

  3. insert info message_routes (user_Id, route_id) values (1, 3)

После выполнения каждого этапа nodetool flush и nodetool compact, но надгробная плита из этапа 2 не была удалена, как показано sstablemetadata. После удаления была выполнена новая вставка. Я надеялся, что у Cassandra есть оптимизации для таких случаев.

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

select * from message_routes where user_id = 1
person exploder86    schedule 01.04.2021
comment
Надгробие раздела повлияет на производительность, только если вы выполняете полное сканирование таблицы ... Что касается оптимизации - ваш вариант использования не охватывает ситуацию, когда у вас было несколько строк в разделе, которые необходимо удалить. См. сообщение в блоге, которое я связал - person Alex Ott; 01.04.2021
comment
Я прочитал этот блог и добавил в него вопрос thelastpickle.com/blog/2016/07/27/ - person exploder86; 01.04.2021