Обзор движка хранения

Движок хранения является фундаментальным слоем хранения базы данных. На основе движка хранения базы данных выполняют операции создания, запроса, обновления и удаления данных. В зависимости от ваших требований различные движки хранения предоставляют разные механизмы хранения и могут комбинироваться с различными движками выполнения для формирования специализированных микроядер баз данных для конкретных сценариев.

В настоящее время система баз данных YMatrix поддерживает следующие движки хранения:

  • HEAP, основанный на PostgreSQL
  • AO (Append-optimized), основанный на Greenplum
  • MARS2, разработанный независимо YMatrix
  • MARS3, оптимизированный на основе MARS2
Движок хранения Описание
HEAP Движок хранения, предоставляемый PostgreSQL, также известный как heap-таблицы, использует строковое хранение. Такие таблицы поддерживают высококонкурентные операции чтения/записи, транзакции, индексы и другие функции.
AO Движок хранения, предоставляемый Greenplum, также известный как Append-Optimized (AO) таблицы, использует формат, оптимизированный для добавления, что обеспечивает преимущества в производительности при массовой загрузке и чтении данных по сравнению с таблицами HEAP. Хранение, оптимизированное для добавления, предоставляет контрольные суммы для защиты данных, сжатие и поддержку как строкового, так и столбцового форматов. Как строковые, так и столбцовые AO-таблицы поддерживают сжатие.
MARS2 Движок хранения, разработанный поверх MARS. За счет использования физически упорядоченного слияния он снижает операции поиска ввода-вывода и повышает производительность запросов. MARS2 поддерживает сжатие, столбцовое хранение, автоматическое архивирование, предварительную агрегацию и другие функции, обеспечивая отличную производительность в сценариях временных рядов. Для сжатия MARS2 предлагает настраиваемое решение: Encoding Chain (mxcustom). Включение цепочки кодирования позволяет осуществлять детализированное, целенаправленное и глубокое сжатие. Таблицы MARS2 не поддерживают обновление и удаление данных.
MARS3 Движок хранения, построенный на основе MARS2. Он наследует преимущества MARS2 в работе с нагрузками временных рядов и расширяет поддержку до сценариев AP и TP. Помимо наследования ключевых функций MARS2 — таких как сжатие Encoding Chain и столбцовое хранение — MARS3 оптимизирует производительность записи, чтобы эффективно обрабатывать разнообразные шаблоны записи (например, высокочастотные небольшие пакетные TP-нагрузки и низкочастотные крупные пакетные AP-нагрузки). MARS3 поддерживает стандартные операции обновления и удаления данных, MVCC, добавление/удаление столбцов и BRIN-индексы.

В следующей таблице сравниваются основные функции MARS2 и MARS3:

Функция MARS2 MARS3
Формат хранения Столбцовый Гибридный строково-столбцовый или столбцовый
Сжатие Поддерживает Encoding Chain Поддерживает Encoding Chain
Обновление и удаление данных через UPDATE и DELETE Не поддерживается Поддерживается
Добавление/удаление столбцов Не поддерживается Поддерживается
MVCC Не поддерживается Поддерживается
Runtimefilter Поддерживается Не поддерживается
Диагностика хранения Поддерживается Не поддерживается
Пакетное слияние данных (UPSERT) Поддерживается Поддерживается
Синтаксис INSERT INTO ... VALUES ... ON CONFLICT ... DO UPDATE Не поддерживается Не поддерживается
Индексы При создании таблицы необходимо создать один индекс mars2_btree, указывающий ключ сортировки; в противном случае таблица недопустима (функционально эквивалентно предложению ORDER BY в таблицах MARS3) Можно необязательно создать один или несколько индексов mars3_brin для повышения эффективности запросов (функционально аналогично minmax-индексам в таблицах MARS2)
Конфигурация параметров таблицы WITH(a=1,b=2,...) WITH(mars3options='a=1,b=2,...')