При использовании Cassandra DB в качестве nosql хранилища в Системе, Платформа AggreGate создает несколько keyspaces и таблиц в нем, в зависимости от настроек.
При этом стратегия по-умолчанию архивирования данных указывается как SizeTieredCompactionStrategy с настройками:
{ 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold' : 32, 'min_threshold' : 4 }
Согласно документации, всего возможно 4 способа архивирования данных:
SizeTieredCompactionStrategy (STCS)
DateTieredCompactionStrategy (DTCS)
TimeWindowCompactionStrategy (TWCS)
LeveledCompactionStrategy (LCS)
Стратегия по-умолчанию не всегда оптимальна для различных применений БД.
При настройках по-умолчанию инициируется уплотнение, когда БД накопила заданное количество (по умолчанию: 4) SSTables аналогичного размера. STCS объединяет эти SSTables в одну большую SSTable. По мере накопления этих больших SSTables, STCS объединяет их в еще более крупные SSTables. В любой момент времени присутствует несколько SSTable разного размера. Этот тип рекомендован при больших нагрузках на запись. В keyspace хранения событий AggreGate (истории переменных в том числе) есть таблицы с хранением по сути time-series данных с установленным TTL.
Для подобных данных разработчики БД согласно документации рекомендуют стратению TimeWindowCompactionStrategy (TWCS). TWCS похож на DTCS с более простыми настройками. TWCS группирует SSTables, используя ряд временных окон. Во время уплотнения TWCS применяет STCS к некомпактным SSTables в самом последнем временном окне. В конце временного окна TWCS сжимает все SSTable, попадающие в это временное окно, в одну SSTable на основе максимальной временной метки SSTable. После завершения основного сжатия для временного окна никакого дальнейшего сжатия данных не произойдет. Процесс начинается с SSTables, записанного в следующем временном окне.
Применение TWCS для упаковки данных таких таблиц, как ag_change позволит, немного жертвуя местом на диске, уменьшить нагрузку на процессор и умерить потребление ОЗУ приложением.
Для переключение уже существующих таблиц на TWCS нужно подключиться клиентом в БД (cqlsh к примеру) и выполнить запрос к целевым таблицам, пример:
ALTER TABLE aggregate_events.ag_change WITH compaction = { 'class' : 'TimeWindowCompactionStrategy', 'compaction_window_unit' : 'HOURS', 'compaction_window_size' : 12};
Изменится стратегия сжатия на TWCS БД aggregate_events таблицы ag_change, которая будет сжимать данные только за указанный интервал, в результате чего размер файла не будет очень большим и не будет влиять на производительность системы. Единица измерения интервала – HOURS (ЧАСЫ), размер – 12. Интервал временного окна можно подбирать опытным путём, отслеживая размер получаемых файлов *big-Data.db, расположенных в папке data хранения файлов БД.