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, значения сохранятся до тех пор, пока существует хотя бы 1 таблица, использующая его.
В результате можно использовать предложение 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
, получение и обновление данных будет успешным только в том случае, если оно выполнено атомарно.