Я новичок в Кассандре. У меня была ситуация, когда выполняется удаление для каждого раздела. Создает ли удаление всего раздела надгробия? Сейчас место не освобождается после удаления.
Кассандра: Удаление всего раздела создает надгробную плиту?
Ответы (3)
Да, удаление всего раздела создает особый тип захоронения, который скрывает все данные в разделе. Но, как и другие надгробия, он хранится в течение gc_grace_seconds и только после этого собирается.
Существует отличный пост в блоге от «Последний огурец», подробно объясняющий надгробные плиты
gc_grace_seconds
, выполните уплотнение и восстановите gc_grace_seconds
- но вам действительно нужно убедиться, что данные восстановлены до и после этого
- person Alex Ott; 18.01.2021
Как уже упоминалось, вы можете обновить gc_grace_seconds до 0, но я бы не рекомендовал этого делать, если у вас нет только одного узла в вашем кластере или ваш RF = 1. Вы можете попытаться уменьшить отсрочку GC до приемлемого для вас времени. Я хотел бы указать максимальное время, которое, по моему мнению, узел Cassandra может оставаться отключенным.
Другой вариант немедленного освобождения места — изменить модель данных, чтобы использовать усечение/удаление. Например, если вам нужны данные только за 24 часа, вы можете создать одну таблицу в день и в какой-то момент удалить таблицы, которые вам не нужны.
Я сделал тест с вставкой новых данных после удаления тем же ключом раздела.
create table message_routes (
user_id bigint,
route_id bigint,
primary key ((user_id), service_id)
)
insert into message_routes (user_id, route_id) values (1, 2)
delete from message_routes where user_id = 1
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