Перейти к основному содержимому
Перейти к основному содержимому

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