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

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