KeeperMap
Этот движок позволяет использовать кластер Keeper/ZooKeeper в качестве консистентного хранилища ключ-значение с линейно согласованными записями и последовательно согласованными чтениями.
Чтобы включить хранилище KeeperMap, вам необходимо определить путь ZooKeeper, по которому будут храниться таблицы, используя конфигурацию <keeper_map_path_prefix>
.
Например:
где путь может быть любым другим действительным путем ZooKeeper.
Создание таблицы
Параметры движка:
root_path
- путь ZooKeeper, по которому будет хранитьсяtable_name
.
Этот путь не должен содержать префикс, определенный конфигурацией<keeper_map_path_prefix>
, так как префикс будет автоматически добавлен кroot_path
.
Дополнительно поддерживается форматauxiliary_zookeeper_cluster_name:/some/path
, гдеauxiliary_zookeeper_cluster
— это кластер ZooKeeper, определенный внутри конфигурации<auxiliary_zookeepers>
.
По умолчанию используется кластер ZooKeeper, определенный в конфигурации<zookeeper>
.keys_limit
- количество ключей, разрешенных внутри таблицы.
Этот лимит является мягким и возможно, что больше ключей окажется в таблице в некоторых крайних случаях.primary_key_name
– любое имя колонки в списке колонок.primary key
должен быть указан и поддерживает только одну колонку в первичном ключе. Первичный ключ будет сериализован в двоичном виде какимя узла
внутри ZooKeeper.- Колонки, кроме первичного ключа, будут сериализованы в двоичном виде в соответствующем порядке и храниться как значение результирующего узла, определяемого сериализованным ключом.
- Запросы с фильтрацией по ключу
equals
илиin
будут оптимизированы для поиска нескольких ключей изKeeper
, в противном случае все значения будут извлечены.
Пример:
с
Каждое значение, которое представляет собой двоичную сериализацию (v1, v2, v3)
, будет храниться внутри /keeper_map_tables/keeper_map_table/data/serialized_key
в Keeper
.
Кроме того, количество ключей будет иметь мягкий лимит в 4 для количества ключей.
Если несколько таблиц создаются по одному и тому же пути ZooKeeper, значения сохраняются, пока существует хотя бы одна таблица, использующая его.
Как результат, возможно использовать клаузу ON CLUSTER
при создании таблицы и совместно использовать данные между несколькими экземплярами ClickHouse.
Конечно, возможно вручную запустить CREATE TABLE
с тем же путем на независимых экземплярах ClickHouse, чтобы достичь того же эффекта совместного использования данных.
Поддерживаемые операции
Вставки
Когда новые строки вставляются в KeeperMap
, если ключ не существует, создается новая запись для ключа.
Если ключ существует, и настройки keeper_map_strict_mode
установлены на true
, возникает исключение, в противном случае значение для ключа перезаписывается.
Пример:
Удаления
Строки могут быть удалены с помощью запроса DELETE
или TRUNCATE
.
Если ключ существует, и настройки keeper_map_strict_mode
установлены на true
, извлечение и удаление данных будет успешно выполнено только в том случае, если это может быть выполнено атомарно.
Обновления
Значения могут быть обновлены с помощью запроса ALTER TABLE
. Первичный ключ не может быть обновлен.
Если настройки keeper_map_strict_mode
установлены на true
, извлечение и обновление данных будет успешно выполнено только если это выполняется атомарно.