Движок EmbeddedRocksDB
Этот движок позволяет интегрировать ClickHouse с RocksDB.
Создание таблицы
Параметры движка:
ttl
- время жизни для значений. TTL принимается в секундах. Если TTL равен 0, используется регулярный экземпляр RocksDB (без TTL).rocksdb_dir
- путь к каталогу существующего RocksDB или путь назначения создаваемого RocksDB. Откройте таблицу с указаннымrocksdb_dir
.read_only
- еслиread_only
установлен в true, используется режим только для чтения. Для хранилища с TTL уплотнение не будет запущено (ни вручную, ни автоматически), поэтому не удаляются устаревшие записи.primary_key_name
– любое имя колонки из списка колонок.primary key
должен быть указан, поддерживается только одна колонка в первичном ключе. Первичный ключ будет сериализован в двоичный формат какrocksdb key
.- колонки, отличные от первичного ключа, будут сериализованы в двоичный формат как
rocksdb
значение в соответствующем порядке. - запросы с ключевым фильтром
equals
илиin
будут оптимизированы для многоключевого поиска вrocksdb
.
Настройки движка:
optimize_for_bulk_insert
– таблица оптимизирована для массовых вставок (конвейер вставки создаст SST файлы и импортирует их в базу данных rocksdb вместо записи в memtables); значение по умолчанию:1
.bulk_insert_block_size
- Минимальный размер SST файлов (в терминах строк), создаваемых массовой вставкой; значение по умолчанию:1048449
.
Пример:
Метрики
Существует также таблица system.rocksdb
, которая предоставляет статистику rocksdb:
Конфигурация
Вы также можете изменить любые опции rocksdb с помощью конфигурации:
По умолчанию оптимизация простого приблизительного подсчета отключена, что может повлиять на производительность запросов count()
. Чтобы включить эту
оптимизацию, установите optimize_trivial_approximate_count_query = 1
. Также эта настройка влияет на system.tables
для движка EmbeddedRocksDB,
включите настройки, чтобы увидеть приблизительные значения для total_rows
и total_bytes
.
Поддерживаемые операции
Вставки
Когда новые строки вставляются в EmbeddedRocksDB
, если ключ уже существует, значение будет обновлено, в противном случае будет создан новый ключ.
Пример:
Удаления
Строки могут быть удалены с помощью запроса DELETE
или TRUNCATE
.
Обновления
Значения могут быть обновлены с помощью запроса ALTER TABLE
. Первичный ключ не может быть обновлен.
Соединения
Поддерживается специальное direct
соединение с таблицами EmbeddedRocksDB.
Это прямое соединение избегает формирования хеш-таблицы в памяти и обращается
к данным напрямую из EmbeddedRocksDB.
При больших соединениях вы можете заметить значительно менее потребление памяти с прямыми соединениями, поскольку хеш-таблица не создается.
Чтобы включить прямые соединения:
Когда join_algorithm
установлен в direct, hash
, будут использованы прямые соединения,
когда это возможно, в противном случае - хеш.