#cassandra
#кассандра
Вопрос:
У меня есть таблица, содержащая около 15 миллиардов записей, и я хочу удалить из нее около 13 миллиардов записей. Я не могу написать 13 миллиардов надгробий за один раз, поскольку на диске недостаточно места.
Я планирую удалять данные по частям, поэтому я буду создавать 400 миллионов надгробий за один раз.
Теперь у меня есть 2 вопроса:
- Каково оптимальное значение
tombstone_failure_threshold
для вышеупомянутого сценария? - Каков наилучший способ удалить 13 миллиардов записей в моем случае?
[РЕДАКТИРОВАТЬ] Добавление схемы и запросов
CREATE TABLE Coupons (
key text PRIMARY KEY,
code text
) WITH COMPACT STORAGE
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4', 'tombstone_compaction_interval': '604800', 'unchecked_tombstone_compaction': 'true'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
- Запрос на чтение: чтение с использованием ключа раздела
- Запрос на удаление: удаление с использованием ключа раздела
Комментарии:
1. покажите схему таблицы, какие запросы выполняются к базе данных и как вы планируете удалять данные — по первичному ключу, ключу раздела и т. Д.?
2. Спасибо @AlexOtt за ваш ответ. Я добавил схему и запросы в описание выше.
Ответ №1:
Если вы читаете только с помощью ключа раздела, а не используете что-то, что выполняет полное сканирование таблицы, например, Spark, тогда вы можете просто удалить данные и не изменять tombstone_failure_threshold
.
Причина этого в том, что Cassandra считает tombstones при их чтении, например, если у вас есть раздел с несколькими строками внутри. Но в вашем случае у вас есть одна строка на раздел, поэтому при чтении по ключу раздела вы можете прочитать не более одного tombstone — для данного раздела.
Но ситуация иная, когда вы используете Spark, DSBulk или пользовательский код, который считывает много разделов одновременно — тогда считывается несколько tombstones, и они учитываются в соответствии с этим порогом.