@jonasas

Как освободить место от удалённых данных Cassandra?

Начал разбираться с Cassandra. В течение пары суток загружаю одну и ту же порцию данных по несколько раз. Размер занимаемой дисковой памяти растёт. Как можно очистить старые (удалённые, обновлённые) данные?
  • Вопрос задан
  • 696 просмотров
Решения вопроса 1
@jonasas Автор вопроса
Сам разобрался в вопросе.
Cassandra пишет поступившие данные в CommitLog (ПЗУ) и MemTable (ОЗУ).
Периодически данные из memTable сбрасываются в SSTable'ы (ПЗУ).

Очищать удалённые данные нужно в двух местах: в SSTable и CommitLog.

Для CommitLog есть настройка commitlog_total_space_in_mb. Cassandra сама будет чистить. Чем меньше мы держим CommitLog, тем больше вероятность потерять данные при падении ноды.

Для SSTable. Cassandra периодически проводит ревизию, объединяя SSTable'ы в одну. Процесс называется compaction (упаковка). Настроить его можно тремя стратегиями: SizeTieredCompactionStrategy, LeveledCompactionStrategy и DateTieredCompactionStrategy.

  • SizeTieredCompactionStrategy -- таблицы будут объединяться, когда достигнут значения min_threshold (настройка Column Family)
  • DateTieredCompactionStrategy -- понятно из названия, по TTL.
  • LeveledCompactionStrategy -- стратегия создаёт SSTable'ы фиксированного, относительно небольшого размера (160Мб по умолчанию), которые группируются на уровни. Каждый уровень (L0, L1, L2 итд) в 10 раз больше предыдущего. Когда SSTables уровня полностью заполняются, они мержутся в более старший уровень (тут и происходит очистка устаревших данных). Этот уровень обеспечивает наибольшую скорость чтения. На скорость записи уровни не влияют.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы