Выбор и настройка Cassandra Compaction Strategies для производительности

Неправильно подобранная стратегия компактификации может незаметно замедлить чтение и переполнить диск — даже если сама Cassandra работает без сбоев. Мы анализируем профиль нагрузки, TTL и частоту обновлений, а затем настраиваем STCS, LCS или TWCS под ваши данные. Наша команда реализует проект под ключ — от аудита до смены стратегии без даунтайма, с последующей поддержкой и гарантией стабильной работы.
Часто задаваемые вопросы

Выбор и настройка Cassandra Compaction Strategies

Мы настраиваем Cassandra compaction под ваши данные — не выбираем стратегию «на глаз», а анализируем профиль нагрузки, TTL, частоту обновлений и размеры SSTables. Неправильный выбор стратегии приводит к деградации read latency в 2–3 раза, переполнению диска и TombstoneOverwhelmingException. Наша команда имеет 5+ лет опыта с Apache Cassandra и более 30 проектов по оптимизации производительности. За 1–3 дня мы проведём аудит, подберём стратегию (STCS, LCS, TWCS) и выполним смену без даунтайма.

STCS, LCS и TWCS — три основных механизма, каждый со своей физикой. STCS объединяет SSTables схожего размера при накоплении порога (по умолчанию 4). Write amplification минимальный, но read страдает из-за множества разрозненных SSTables. LCS раскладывает данные по уровням: каждое чтение касается не более одного SSTable на уровень, что даёт отличную read performance ценой десятикратного write amplification. TWCS спроектирован для time-series: разбивает данные на временные окна и финализирует каждое окно, а при истечении TTL целиком удаляет SSTable — без проверки каждой строки.

Характеристика STCS LCS TWCS
Write amplification Низкий Высокий (~10x) Низкий
Read performance Средняя Отличная Хорошая
Дисковое пространство Требует 2x в пике ~1.1x ~1.1x
Работа с TTL Плохо Средне Отлично
Рекомендуемая нагрузка Append-only, write-heavy Read/write, updates Time-series с TTL

Какую стратегию выбрать для вашей нагрузки?

Для insert-only таблиц без удалений — STCS. Для баланса чтения и записи с частыми updates — LCS. Для метрик, логов и других time-series с TTL — TWCS. На практике в одном кластере уживаются разные стратегии. Пример: таблица events (append-only, TTL) → TWCS; user_profiles (частые запросы и изменения) → LCS; raw_data (bulk insert, без TTL) → STCS. Мы помогаем настроить каждую таблицу индивидуально.

Что делать, если compaction отстаёт?

Команда nodetool compactionstats показывает pending tasks. Если они растут — compaction не успевает за writes. Краткосрочное решение: увеличить compaction_throughput_mb_per_sec до 64–128 МБ/с (зависит от дисковой подсистемы). Долгосрочное — пересмотреть стратегию или добавить ноды. Типичная ошибка — держать default для SSD (16 МБ/с), что приводит к росту read latency. Мы в своей практике поднимали throughput до 200 МБ/с на NVMe без потери стабильности.

Tombstones — ещё один враг производительности. При чтении одной партиции может быть прочитано более 100 000 tombstones, что вызывает TombstoneOverwhelmingException. Причина — частые DELETE или UPDATE без компактификации. Решение: правильно выбрать стратегию и настроить gc_grace_seconds. В LCS tombstones удаляются быстрее, в STCS — медленнее. Для time-series с TTL tombstones практически не образуются.

Сценарий Рекомендуемая стратегия Причина
High write, no deletes STCS Низкий write amplification
Read-intensive, updates LCS Минимальное число SSTables на чтение
Time-series, TTL TWCS Автоматическое удаление истёкших SSTables

Почему tombstones убивают read latency?

Tombstones — метки об удалении строк. При чтении партиции Cassandra сканирует все SSTables, собирая живые данные и игнорируя tombstones. Если их много (например, при частых DELETE без своевременной компактификации), latency растёт. TWCS решает эту проблему для time-series: истёкшие SSTables удаляются целиком, не оставляя tombstones. Для остальных случаев помогает настройка gc_grace_seconds и выбор правильной стратегии.

Процесс работы: от аудита до деплоя

  1. Аудит — анализируем nodetool tablestats, метрики compaction и load, выявляем узкие места.
  2. Проектирование — для каждой таблицы выбираем стратегию и параметры (min/max threshold, bucket size для TWCS).
  3. Реализация — применяем ALTER TABLE в непиковое время. При необходимости запускаем nodetool compact перед сменой стратегии.
  4. Тестирование — проверяем read/write latency, дисковое потребление, количество tombstones.
  5. Деплой и мониторинг — настраиваем alerts на pending tasks и tombstone ratio в Prometheus/Grafana.
Пример из практики Для time-series таблицы с 1 млрд строк, TTL = 30 дней, мы перешли с LCS на TWCS. Write amplification снизился с 8x до 1.5x, read latency упала на 40%, дисковое потребление сократилось на 30%. Весь процесс занял 2 дня без даунтайма.

Что входит в работу

  • документация с новыми настройками и рекомендациями,
  • мониторинг compaction после изменений (1 неделя поддержки),
  • обучение команды: как диагностировать проблемы с compaction,
  • доступ к дашборду Grafana с метриками compaction.

Сроки: от 1 до 3 дней в зависимости от количества таблиц и сложности реструктуризации. Оценим проект после аудита — свяжитесь с нами для консультации.

Типичные ошибки при настройке compaction

  • Использование STCS для таблиц с частыми delete — накапливаются tombstones.
  • Переход на TWCS без предварительного компакта старых SSTables.
  • Игнорирование параметра compaction_throughput_mb_per_sec — оставляют значение по умолчанию.
  • Применение LCS на write-heavy нагрузке — убивает диск.

Если требуется разобраться с compaction в вашем кластере, напишите нам — проведём аудит и предложим оптимальные настройки под ваш профиль нагрузки. Результат — предсказуемая read latency и снижение дисковых затрат до 40%. Закажите аудит compaction уже сегодня, чтобы избежать простоев. Подробнее о compaction strategies можно прочитать в официальной документации Apache Cassandra.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1140