как выбрать пороговое значение tombstone_failure_threshold, если я хочу удалить миллиарды записей?

#cassandra

#кассандра

Вопрос:

У меня есть таблица, содержащая около 15 миллиардов записей, и я хочу удалить из нее около 13 миллиардов записей. Я не могу написать 13 миллиардов надгробий за один раз, поскольку на диске недостаточно места.

Я планирую удалять данные по частям, поэтому я буду создавать 400 миллионов надгробий за один раз.

Теперь у меня есть 2 вопроса:

  1. Каково оптимальное значение tombstone_failure_threshold для вышеупомянутого сценария?
  2. Каков наилучший способ удалить 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, и они учитываются в соответствии с этим порогом.