Базы данных
Обзор
Чтобы оптимизировать выполнение специализированных задач, 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
и других запросов, которые ее используют.