Табличный движок KeeperMap
Этот движок позволяет использовать кластер Keeper/ZooKeeper как согласованное хранилище ключ–значение с линеаризуемыми записями и последовательно согласованными чтениями.
Чтобы включить табличный движок KeeperMap, необходимо задать в конфигурации параметр <keeper_map_path_prefix>, определяющий путь в ZooKeeper, по которому будут храниться таблицы.
Например:
где path может быть любым другим допустимым путем в 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должен быть указан; он может содержать только один столбец. Первичный ключ будет сериализован в бинарном виде какnode nameв 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, выборка и обновление данных выполнятся успешно только при атомарном выполнении операции.