Кассандра: как уменьшить количество надгробий в таблице? (tombstone_compaction_interval, gc_grace_seconds и LevelledCompactionStrategy)

У меня есть таблица, в которую я вставляю данные с TTL равным 1 минуте, и у меня есть предупреждение в DSE OpsCenter о большом количестве надгробий в этой таблице. Это имеет смысл, поскольку в эту таблицу вставляется в среднем 80 записей в минуту. Так, например, за полный день 80 * 60 * 24 = 115200 вставленных записей и TTL за один день.

У меня вопрос: что мне делать, чтобы уменьшить количество надгробий в этой таблице?

Я изучал tombstone_compaction_interval и gc_grace_seconds, и здесь это немного сбивает с толку, так как у меня возникают проблемы с пониманием точного воздействия этих свойств на надгробия (даже после прочтения документации, предоставленной DataStax - http://docs.datastax.com/en/cql/3.1/cql/cql_reference/compactSubprop.html и http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html).

Я также изучал LevelledCompactionStrategy (https://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra), поскольку он, похоже, также влияет на уплотнение надгробий, хотя я не совсем понимаю, почему.

Так что я надеюсь, что кто-то сможет помочь мне лучше понять, как все это работает, или даже просто сообщит мне, иду ли я в правильном направлении.


person Rui Taborda    schedule 20.07.2017    source источник


Ответы (1)


Прочтите http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html. Очень хорошее чтение.

В целом: параметр gc_grace_seconds - это минимальное время, в течение которого надгробия будут храниться на диске после удаления данных. Мы должны убедиться, что все реплики получили удаление и все надгробия сохранены, чтобы избежать проблем с данными зомби. По умолчанию 10 дней.

tombstone_compaction_interval: как часть этой JIRA (https://issues.apache.org/jira/browse/CASSANDRA-4781), это свойство было введено. Когда коэффициент уплотнения был достаточно высоким, чтобы вызвать уплотнение с одним SSTable, но эти надгробные плиты не были удалены из-за перекрытия SSTable.

Я не уверен в вашей текущей модели данных, но вот мои предложения.

  1. Возможно вам придется сменить DM. Прочтите https://academy.datastax.com/resources/getting-started-time-series-data-modeling и Моделирование временных рядов (с датой начала и окончания) в кассандре
  2. Изменить шаблон записи.
  3. Изменить шаблон чтения. Попробуйте читать только активные данные. (Согласно вашему текущему DM, когда вы его читаете, он проходит через ячейки надгробия, чтобы добраться до активных ячеек)
  4. Попробуйте использовать TimeWindowCompactionStrategy и настройте его в соответствии с вашей рабочей нагрузкой. (http://thelastpickle.com/blog/2017/01/10/twcs-part2.html)
  5. Если вы используете TTL при вставке (например, с INSERT или UPDATE stmnt), посмотрите, можете ли вы изменить его на уровень таблицы.

Если вы используете STCS и хотите изменить подсвойства уплотнения, возможно, вы могли бы изменить unchecked_tombstone_compaction = true и min_threshold = 3 (немного агрессивно)

person cdatta    schedule 20.07.2017
comment
Спасибо за быстрый ответ, я прочитаю все предоставленные вами ссылки и напишу сюда еще раз, если у меня будут еще вопросы. В противном случае я отмечу это как принятый :) - person Rui Taborda; 21.07.2017