Кассандра - установка огромного поля в ноль, не возвращая дисковое пространство - PullRequest
2 голосов
/ 18 июня 2020

В нашем пространстве ключей у нас есть только несколько таблиц, из которых одна содержит большую часть данных. В этой таблице есть только один ColumnEntity (например, столбец X), который содержит 99,99% данных. Когда данные теряют актуальность, мы устанавливаем TTL на несколько дней, а также устанавливаем для столбца X значение NULL (из процесса java). В идеале это должно немедленно освободить значительное пространство на диске, поскольку в столбце X было 90% всех данных пространства ключей, но мы не видим никакого сокращения использования дискового пространства.

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

Что нам не хватает?

1 Ответ

3 голосов
/ 18 июня 2020

В Cassandra никакие данные не изменяются на месте - все файлы неизменяемы. Когда вы выполняете удаление или вставку нуля (это то же самое), специальный маркер добавлен в дополнение к предыдущим данным на диске. Таким образом, когда вы добавляете данные, вы фактически добавляете больше данных: -)

Фактическое удаление данных происходит, когда файлы SSTable уплотняются фоновым сжатием. Планирование сжатия файла зависит от используемой стратегии сжатия и параметров ее конфигурации. Могут возникнуть ситуации, когда у вас есть старые данные в больших файлах, которые некоторое время не могут быть сжаты. В зависимости от вашей версии Cassandra / DSE вы можете принудительно выполнить сжатие всех данных, выполнив nodetool compact -s на каждом узле, но для этого потребуется достаточно места на диске (размер таблицы). Другая возможность - использовать nodetool garbagecollect -g CELL в отдельных SSTables, но для этого также потребуется свободное место на диске.

PS Рекомендую пройти хотя бы курс DS201 на DataStax Academy .

...