Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
MatrixDB поддерживает различные движки хранения и решения для хранения, из которых пользователи могут выбирать.
MatrixDB поддерживает следующие движки хранения:
| Тип | Описание |
|---|---|
| Heap | Heap-таблица — это тип хранения, предоставляемый традиционными базами данных PostgreSQL, также известный как кучные таблицы. Этот тип таблиц поддерживает большое количество одновременных операций чтения и записи, транзакции, индексы и другие функции. |
| Mars1 | Mars1-таблица — это собственный тип хранения MatrixDB. Поддерживает сжатие, колоночное хранение и предварительную агрегацию, обеспечивая чрезвычайно высокую производительность в аналитических сценариях. Однако данные должны вставляться по порядку, обновления и удаления пока не поддерживаются. |
| Mars2 | Mars2-таблица — это движок хранения, разработанный на основе Mars1. Поддерживает сжатие, колоночное хранение и автоматическое архивирование без ручного перевода «горячих» данных в «холодные». Производительность при поступлении данных во времени выше, оптимизация сценариев upsert наиболее заметна. |
Выше были представлены характеристики нескольких движков хранения. Теперь рассмотрим, как создавать таблицы с использованием различных движков хранения:
Heap-таблица является движком хранения по умолчанию в MatrixDB, поэтому при создании таблицы без указания специального движка хранения будет создана Heap-таблица:
CREATE TABLE disk(
time timestamp with time zone,
tag_id int,
read float,
write float
)
Distributed by (tag_id);
Таблица Mars1 зависит от расширений matrixts и mars, поэтому перед созданием таблицы необходимо сначала создать расширение в библиотеке, использующей этот движок хранения:
CREATE EXTENSION matrixts;
CREATE EXTENSION mars;
При создании таблицы используйте USING Mars, чтобы указать движок хранения:
CREATE TABLE disk_mars(
time timestamp with time zone,
tag_id int,
read float,
write float
)
USING Mars
WITH (tagkey="tag_id", timekey="time", timebucket="8 hours")
Distributed by (tag_id);
Метаданные таблицы Mars задаются в ключевом слове WITH, включая:
Таблица Mars поддерживает колоночное сжатие. Сжатие позволяет не только уменьшить объем хранилища, но и снизить затраты на выполнение запросов.
Таблица Mars поддерживает 4 типа сжатия:
При создании таблицы Mars тип сжатия столбца указывается через параметр compressiontype. Одновременно необходимо указать уровень сжатия (от 0 до 9) через compresslevel. Чем выше уровень, тем выше степень сжатия, меньше занимаемое пространство, но выше нагрузка на вычислительные ресурсы.
Ниже приведён пример создания таблицы Mars с помощью SQL, где для разных столбцов указаны разные типы сжатия:
CREATE TABLE disk_mars (
time timestamp with time zone ENCODING (compresstype=rle_type, compresslevel=1),
tag_id int ENCODING (compresstype=zstd, compresslevel=1),
read float ENCODING (compresstype=zlib, compresslevel=1),
write float ENCODING (compresstype=lz4, compresslevel=1)
)
USING Mars
WITH (tagkey="tag_id", timekey="time", timebucket="8 hours")
Distributed by (tag_id);
Таблица Mars2 зависит от расширения matrixts, поэтому перед созданием таблицы необходимо сначала создать расширение в базе данных, использующей данный движок хранения:
CREATE EXTENSION matrixts;
При создании таблицы используйте USING mars2, чтобы указать движок хранения:
CREATE TABLE metrics(
time timestamp,
tag_id int,
sensor float4
)
USING mars2
Distributed by(tag_id);
Таблица Mars2 содержит следующие необязательные параметры:
| Имя параметра | Значение по умолчанию | Минимальное значение | Максимальное значение | Описание |
|---|---|---|---|---|
| compress_threshold | 1200 | 1 | 8000 | Верхний предел количества кортежей для сжатия в одной группе |
| compressiontype | lz4 | -- | -- | Алгоритм сжатия, поддерживаемые: 1. zstd 2. zlib 3. lz4 |
| compresslevel | 1 | 1 | -- | Уровень сжатия. Чем меньше значение, тем быстрее сжатие, но хуже степень сжатия; чем больше значение, тем медленнее сжатие, но лучше степень сжатия. Разные алгоритмы имеют разные диапазоны допустимых значений: zstd: 1–19 zlib: 1–9 lz4: 1–20 |
Как указано выше, эти параметры можно добавить с помощью ключевого слова WITH при создании таблицы, например:
CREATE TABLE metrics(
time timestamp,
tag_id int,
sensor float4
) using mars2
WITH(compress_threshold=1200, compresstype='lz4', compresslevel=1)
Distributed by(tag_id);
После создания таблицы Mars2 необходимо дополнительно создать индекс типа mars2_btree, чтобы обеспечить нормальное чтение и запись данных. Индекс выполняет несколько основных функций:
CREATE INDEX idx_metrics ON metrics USING mars2_btree(tag_id, time);
Когда данные с одного и того же временного момента с одного устройства поступают пакетно, Mars2 может объединять данные с одного устройства за одно и то же время. Для использования функции объединения при создании индекса необходимо добавить опцию uniquemode=true:
CREATE INDEX idx_metrics ON metrics USING mars2_btree(tag_id, time) WITH (uniquemode=true);
Выше были описаны несколько движков хранения, поддерживаемых MatrixDB в сценариях временных рядов. Ниже описывается использование различных движков хранения в рамках различных решений для хранения.
В настоящее время MatrixDB поддерживает два решения для хранения:
В этом решении «горячие» и «холодные» данные хранятся с использованием разных движков хранения.
Применимые сценарии: много агрегирующих запросов, бизнес имеет период низкой нагрузки для перевода «горячих» данных в «холодные»
Для подробного использования этого решения см. Практика решения хранения Heap+Mars1
Решение Mars2 использует только один движок хранения. По сравнению с Heap+Mars1, Mars2 автоматически выполняет сжатие «холодных» данных, исключая необходимость ручного перевода «горячих» данных в «холодные».
Применимые сценарии: бизнес не имеет периода низкой нагрузки для перевода «горячих» данных в «холодные», и часто выполняются операции upsert.