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

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

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

Я изучал 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), поскольку он, похоже, также влияет на уплотнение надгробий, хотя я не совсем понимаю Зачем.

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

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 (немного агрессивно)

Другие вопросы по тегам