Базы данных

Обзор

Чтобы оптимизировать выполнение специализированных задач, ADQM поддерживает движки баз данных различного назначения:

  • Atomic — основной движок баз данных ADQM, который используется по умолчанию (см. Особенности движка Atomic ниже);

  • MySQL — движок для доступа к внешней базе данных MySQL;

  • MaterializedMySQL — экспериментальный движок для репликации базы данных MySQL в ADQM;

  • PostgreSQL — движок для доступа к внешней базе данных PostgreSQL;

  • MaterializedPostgreSQL — экспериментальный движок для репликации базы данных PostgreSQL в ADQM;

  • SQLite — движок для доступа к базе данных SQLite;

  • Lazy — движок для работы с таблицами семейства Log, которые сохраняются только в оперативной памяти;

  • Replicated — экспериментальная версия движка Atomic с поддержкой репликации полной базы данных.

Полную информацию по всем движкам баз данных можно получить в документации ClickHouse.

 
По умолчанию в ADQM есть следующие базы данных:

  • system — база данных с системными таблицами, которые содержат информацию о состоянии сервера и его внутренних процессах, а также системные логи (таблицы *_log);

  • INFORMATION_SCHEMA (information_schema)  — системная база данных, содержащая представления, с помощью которых можно получить информацию о метаданных объектов базы данных;

  • default — база данных Atomic, которая создается по умолчанию при установке ADQM (конфигурационный параметр Default database сервиса ADQMDB).

Посмотреть список всех баз данных на сервере ADQM можно с помощью запроса SHOW DATABASES:

SHOW DATABASES;

Пример результата выполнения команды:

--name----------------
│ INFORMATION_SCHEMA │
│ default            │
│ information_schema │
│ system             │
│ test_database      │
----------------------

Создание базы данных

Для создания базы данных используется запрос CREATE DATABASE:

CREATE DATABASE <database_name> [ENGINE = <engine_name>];

Если в запросе не указать параметр ENGINE, он создаст базу данных Atomic. Ниже перечислены основные особенности движка Atomic.

Особенности движка Atomic

UUID таблиц

У каждой таблицы в базе данных Atomic есть уникальный UUID. Формат UUID — xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy.

Данные таблицы хранятся в папке /var/lib/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy, на которую указывает ссылка /var/lib/clickhouse/data/<database_name>/<table_name>, где <database_name> — имя базы данных, <table_name> — имя таблицы.

За счёт того, что имя таблицы является ссылкой в файловой системе, операции RENAME TABLE и DROP TABLE выполняются быстро и не являются блокирующими. Также доступны атомарные операции EXCHANGE TABLES и EXCHANGE DICTIONARIES.

RENAME TABLE

Запрос на переименование таблицы RENAME TABLE выполняется без изменения UUID и перемещения табличных данных. Этот запрос не ожидает завершения использующих таблицу запросов и выполняется мгновенно — при задании нового имени таблицы сразу появляется новая ссылка на папку с данными таблицы, после чего старая ссылка удаляется.

EXCHANGE TABLES/DICTIONARIES

Запрос EXCHANGE атомарно обменивает имена между двумя таблицами или двумя словарями (словарь — это хранилище данных типа ключ/значение, которое полностью или частично хранится в оперативной памяти сервера ADQM и может быть использовано в качестве справочника для подстановки значений по ключам в итоговую выборку данных).

Например, вместо неатомарной операции:

RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;

можно использовать один атомарный запрос:

EXCHANGE TABLES new_table AND old_table;

DROP/DETACH TABLE

Таблицу можно удалить с помощью запроса DROP TABLE или отключить (сделать таблицу "невидимой" для сервера) с помощью запроса DETACH TABLE.

При выполнении запроса DROP TABLE данные не удаляются немедленно. Таблица помечается как удаленная (к ней не могут приходить новые запросы), метаданные перемещаются в папку /var/lib/clickhouse/metadata_dropped/, а база данных уведомляет об этом фоновый поток. Настройка database_atomic_delay_before_drop_table_sec задает задержку перед окончательным удалением данных.

Можно активировать синхронный режим с помощью модификатора SYNC. При активации настройки database_atomic_wait_for_drop_and_detach_synchronously этот модификатор добавляется ко всем запросам DROP и DETACH. В этом случае таблица будет удалена сразу после завершения SELECT, INSERT и других запросов, которые ее используют.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней