Не работает ttl для движка EmbeddedRocksDB в ClickHouse
Я создаю таблицу в ClickHouse с движком EmbeddedRocksDB согласно инструкции:
EmbeddedRocksDB([ttl, rocksdb_dir, read_only])
ttl - time to live for values. TTL is accepted in seconds. If TTL is 0, regular RocksDB instance is used (without TTL).
Создание таблицы:
CREATE TABLE default.ttl_table
(
key String,
value String
)
ENGINE = EmbeddedRocksDB(10)
PRIMARY KEY key;
Я ожидаю, что вставленные в таблицу строки будут удаляться через 10 секунд. Однако, данные из таблицы не удаляются совсем, как будто параметр ttl
не работает. Подскажите, пожалуйста, что я делаю не так?
ClickHouse я запускаю в докере, используя образ: clickhouse/clickhouse-server:23.1-alpine
Ответы (1 шт):
Согласно документации ttl является нестрогим временем удаления, то есть гарантирует, что вставленные значения ключей останутся в базе данных как минимум ttl времени, и БД приложит усилия, чтобы удалить значения ключей как можно скорее после ttl секунд их вставки. Кроме того, записи с истёкшим сроком жизни удаляются только при сжатии.
Для того чтобы удалить истёкшие записи в ClickHouse, нужно выполнить команду: optimize table ttl_table
, где ttl_table
- имя таблицы с EmbeddedRocksDB-движком.