Табличный движок EmbeddedRocksDB
Этот движок позволяет интегрировать ClickHouse с RocksDB.
Создание таблицы
Параметры движка:
ttl— время жизни значений. TTL задаётся в секундах. Если TTL равен 0, используется обычный экземпляр RocksDB (без TTL).rocksdb_dir— путь к каталогу существующей базы RocksDB или целевой путь для создаваемой базы RocksDB. Таблица открывается с указаннымrocksdb_dir.read_only— еслиread_onlyустановлен в true, используется режим только для чтения. Для хранилища с TTL компакция (compaction) не будет запускаться (ни вручную, ни автоматически), поэтому просроченные записи не удаляются.primary_key_name— имя любого столбца из списка столбцов.primary keyдолжен быть указан; в состав первичного ключа может входить только один столбец. Первичный ключ будет сериализован в бинарном виде какrocksdb key.- столбцы, отличные от первичного ключа, будут сериализованы в бинарном виде как
rocksdb valueв соответствующем порядке. - запросы с фильтрацией по ключу с использованием
equalsилиinбудут оптимизированы до поиска по нескольким ключам вrocksdb.
Настройки движка:
optimize_for_bulk_insert— таблица оптимизирована для пакетных вставок (конвейер вставки будет создавать SST-файлы и импортировать их в базу данных RocksDB вместо записи в memtable); значение по умолчанию: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, по возможности будут использоваться прямые соединения, а в остальных случаях — хеш-соединения.