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, получение и обновление данных будут успешными только если это выполняется атомарно.