Кассандра: Нужно ли ручное ведение по-прежнему при применении TWCS? - PullRequest
1 голос
/ 30 сентября 2019

Я только начинаю изучать Cassandra для (долгосрочного) сохранения временных рядов (записи только один раз) данных, которые потенциально могут стать довольно большими.

Если предположить, что, возможно, самый простой временной ряд:

CREATE TABLE raw_data (
    sensor uuid,
    timestamp timestamp,
    value int,
    primary key(sensor, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC)

Чтобы убедиться, что разделы не растут слишком много, многие публикации в Интернете рекомендуют группирование, например, введение дня или просто повышениеподсчитывать номер ковша как

primary key((sensor, day, bucket), timestamp)

. Однако этими стратегиями нужно управлять вручную, что кажется довольно громоздким, особенно для неизвестного количества сегментов.

Но что, если я скажу добавить:

  AND compaction = {
     'class': 'TimeWindowCompactionStrategy', 
     'compaction_window_size': 1, 
     'compaction_window_unit': 'DAYS'
  };

Как сказано, например, в https://thelastpickle.com/blog/2016/12/08/TWCS-part1.html:

TWCS направлена ​​на упрощение DTCS путем создания временных окон SSTable, которые сжимаются друг с другом с помощью стратегии многоуровневого уплотнения.

Насколько я понимаю, это означаеттот Cassandra при использовании TWCS внутренне создает ведра только для чтения. Таким образом, мне интересно, если мне все еще нужно вручную внедрить ключ объединения day?

1 Ответ

1 голос
/ 01 октября 2019

Цель сегмента - остановить слишком большой раздел. Без сегмента рост раздела неограничен, то есть, чем больше данных вы собираете для конкретного датчика, тем больше становится раздел без какого-либо предельного ограничения.

Изменение одной только стратегии сжатия не остановит ростраздела, так что вам все равно понадобится корзина.

(Вы написали «Кассандра, когда внутреннее использование TWCS создает корзины только для чтения». Не путайте это со столбцом «корзина». Используется то же словодля двух совершенно разных вещей.)

С другой стороны, если бы вы установили TTL для данных, то это фактически ограничило бы размер раздела, потому что данные, более старые, чем TTL, были бы (в конечном итоге) удаленыс диска. Таким образом, если бы TTL были достаточно малы, вам больше не понадобилось бы ведро. В этом конкретном сценарии - данные временного ряда, собранные по порядку, и TTL - тогда TWCS является оптимальной стратегией уплотнения.

...