Данный документ содержит официальные пояснения специфических и сложных терминов, используемых в YMatrix.
ACID — это четыре ключевых свойства, которые система управления базами данных (СУБД) должна гарантировать для обеспечения надежности транзакций при записи или обновлении данных: Атомарность, Согласованность, Изолированность и Долговечность.
AO — это сокращение от Append-Optimized (оптимизированный для добавления), формат хранения, оптимизированный для операций добавления. Таблицы, использующие этот формат, называются AO-таблицами.
AO-таблицы поддерживают массовую загрузку и чтение данных, обеспечивая преимущества производительности по сравнению с HEAP-таблицами. Как строковые, так и столбцовые AO-таблицы могут сжиматься. Строковые AO-таблицы сокращённо обозначаются как AORO/AORS, а столбцовые — как AOCO/AOCS.
Сокращение от MatrixCustom — это проприетарный алгоритм сжатия, разработанный YMatrix.
Цепочка кодирования использует особенности временных рядов для достижения глубокого сжатия. Поддерживает сжатие на уровне столбца и таблицы для таблиц MARS2/3, а также автоматическое кодирование.
Гиперконвергенция — это новое понятие в области баз данных, введённое YMatrix. По сравнению с другими архитектурами, гиперконвергенция интегрирует несколько типов данных и операций в единой базе данных, обеспечивая высокую производительность для разнообразных типов данных и сценариев, тем самым устраняя «острова данных».
Внутренне YMatrix использует микроядерную архитектуру. На основе общих компонентов инфраструктуры она предоставляет специализированные комбинации движков хранения и выполнения для различных бизнес-сценариев, формируя специализированные микроядра для повышения производительности записи, хранения и запросов.
Сокращение от Continuous View — это механизм, обеспечивающий быстрый ответ на агрегационные запросы.
После создания CV система автоматически выполняет реальное агрегирование во время внесения данных, синхронизируясь с базовой таблицей на уровне транзакции.
HEAP — это движок хранения, предоставляемый PostgreSQL, использующий строковое хранение. HEAP-таблицы поддерживают высокую параллельность операций чтения/записи, транзакции и индексирование.
В HEAP-таблицах данные не имеют встроенного порядка и полагаются на индексные страницы для повышения производительности запросов. Данные изначально хранятся в порядке вставки, но движок базы данных может перемещать строки внутри кучи для эффективного хранения. Поэтому порядок строк предсказать невозможно. Для обеспечения упорядоченного вывода пользователи должны использовать ORDER BY.
Для определения постоянного логического порядка хранения строк пользователи должны создать кластеризованный индекс, а не использовать HEAP-таблицу.
ETCD — это распределённое хранилище ключ-значение, используемое для хранения и извлечения данных в распределённых системах. Оно использует алгоритм консенсуса Raft для обеспечения согласованности и надёжности данных. Разработано для высокой доступности, ETCD обладает надёжными возможностями восстановления после сбоев. Предоставляет простой RESTful API, позволяющий приложениям легко получать доступ и манипулировать парами ключ-значение.
Raft — это алгоритм, решающий проблемы консенсуса в распределённых системах. Он позволяет группе машин функционировать как единое целое, продолжая работу даже при сбое некоторых узлов. Таким образом, алгоритмы консенсуса играют критически важную роль в построении надёжных масштабируемых программных систем.
Связанные понятия:
FTP-сервер (File Transfer Protocol) — это программное обеспечение, используемое для передачи файлов по компьютерным сетям. Он предоставляет стандартный метод для загрузки и скачивания файлов, а также поддерживает операции управления файлами и каталогами.
Механизм автоматизированных операций, который отслеживает статус узлов через кластер ETCD и автоматически переключает основной и резервный узлы при сбоях.
ETCD является ключевым компонентом сервиса состояния кластера YMatrix, управляя состоянием всех узлов. При сбое любого узла система базы данных автоматически выполняет failover без вмешательства оператора.
После завершения failover затронутый узел может иметь только первичный/основной экземпляр без здорового зеркального/резервного. При повторном сбое восстановление станет невозможным. Поэтому необходимо использовать инструмент mxrecover для создания здорового зеркального/резервного экземпляра для нового первичного/основного.
Часто используемая функция в сценариях потоковой обработки. Позволяет непрерывно агрегировать данные в пределах недавнего временного окна.
Скользящие окна часто применяются в мониторинге и оповещениях. Когда данные в окне соответствуют заданным условиям, сервер отправляет оповещения клиентам. Например, вычислять среднюю температуру по каждому устройству каждую минуту и генерировать оповещение, если она превышает 90 градусов.
Стандартная стратегия распределения зеркал в YMatrix. При наличии как минимум двух хостов последовательность Primary-сегментов на одном хосте рассматривается как линейная лента, сложенная пополам. Зеркала затем размещаются по часовой стрелке на других хостах, начиная с середины.
Добавление новых Primary при масштабировании не нарушает существующие кольца зеркал, а создаёт новое.
Помимо кольцевого зеркалирования, YMatrix поддерживает:
Также известна как Pull-Based Execution. Один из движков выполнения, поддерживаемых YMatrix — движок выполнения Вулкан реализует итеративные вычисления с использованием этой модели.
После разбора SQL-запроса генерируется дерево запроса, где каждый узел представляет алгебраический оператор.
В модели Вулкана операторы действуют как итераторы, каждый из которых предоставляет интерфейс next(). Реализация включает три шага:
next() дочернего оператора для получения одной кортежной записи.Во время выполнения next() вызывается сверху вниз от корня дерева запроса, а данные движутся снизу вверх. Преимущества включают чёткую логику и низкую связанность. Однако обработка по одной строке снижает эффективность использования кэша CPU, а частые вызовы next() создают высокую накладную нагрузку.
Векторизованная модель аналогична модели Вулкана: создаёт дерево запроса и использует pull-based выполнение. Ключевое отличие заключается в том, что каждая итерация возвращает пакет кортежей, а не один. Это снижает накладные расходы на итерации и позволяет использовать аппаратные возможности, такие как SIMD, особенно выгодно для столбцового хранения.
Обозначает сетевой уровень в архитектуре базы данных, обеспечивающий межпроцессное взаимодействие между Segment и опирающийся на стандартную инфраструктуру Ethernet-коммутации.
Также известный как Cost-Based Optimization — это оптимизатор по умолчанию в YMatrix для генерации планов запросов.
Оптимизаторы обычно выполняют два этапа: оптимизацию на основе правил (RBO) и оптимизацию на основе стоимости (CBO). В отличие от RBO, CBO опирается на точные и актуальные статистические данные, позволяя планам выполнения динамически адаптироваться к изменениям данных.
Метод, используемый YMatrix для автоматизации разделения горячих и холодных данных, интегрированный с движком хранения MARS3. Холодные данные автоматически понижаются и сохраняются в объектном хранилище, при этом остаются прозрачно доступными через уровень MPP для эффективного анализа холодных данных. Процесс понижения не требует ручного вмешательства, минимизируя затраты на управление и эксплуатацию.
Объектное хранилище — это архитектура хранения данных, в которой данные управляются как объекты, в отличие от файловых систем (использующих иерархические файлы) и блочного хранения (использующего секторы и блоки). Обеспечивает высокую стоимость-эффективность и низкую стоимость хранения.
В MatrixGate (mxgate) Job отвечает за запись данных в целевую таблицу. Каждый Job имеет планировщик slot, обеспечивающий выполнение только одной транзакции записи за раз. Независимо от того, запускается ли mxgate через конфигурацию или командную строку, необходимо указать имя целевой таблицы (через --target). После проверки существования таблицы mxgate запускает специфичный для таблицы Job. Job активирует slot и подключает их к экземплярам Segment для параллельной записи данных. Одна таблица инициирует один Job, а один Job может активировать несколько slot.
Расцепление — это снижение зависимостей между компонентами или модулями системы, позволяющее им разрабатываться, тестироваться и поддерживаться независимо. Эта техника широко применяется в разработке программного обеспечения, архитектуре систем и сетевой коммуникации. Снижение взаимозависимостей между компонентами улучшает надёжность, масштабируемость и поддерживаемость системы.
Серия движков хранения, разработанных YMatrix, расшифровывается как Matrix Append-Optimized Resilient Storage.
Включает MARS2 и MARS3:
Обозначает основной узел в кластере, выполняющий следующие функции:
Сокращение от Massively Parallel Processing. В кластере базы данных с архитектурой Shared-Nothing каждый узел имеет независимые системы дисков и памяти. Бизнес-данные распределены между узлами, которые связаны через специализированные или коммерческие сети для совместного выполнения вычислений и предоставления служб базы данных.
Кратко: архитектура MPP распределяет задачи между несколькими серверами и узлами, выполняет вычисления параллельно и агрегирует результаты для финального вывода.
Multi-Version Concurrency Control (MVCC) — это механизм обеспечения согласованности данных с использованием многоверсионной модели. MVCC обеспечивает изоляцию транзакций для каждой сессии, гарантируя, что каждый запрос видит согласованный снимок данных, не затронутый параллельными транзакциями.
Оптимизатор по умолчанию в Greenplum Database, расширяющий традиционные возможности планирования и оптимизации запросов для лучшей производительности в многопроцессорной среде. В YMatrix ORCA включается установкой параметра optimizer и поддерживается в версиях 5.2.0 и выше, интегрируясь с векторизованным движком выполнения.
GPORCA повышает производительность запросов в следующих областях:
Ключевая технология для повышения производительности движка выполнения YMatrix. Runtime Filters создаются динамически во время выполнения на основе оценки стоимости, в отличие от фильтров, заранее запланированных оптимизатором.
Recovery Point Objective (RPO) — это максимальный допустимый объём потери данных после сбоя системы. Меньшее значение RPO указывает на меньший риск потери данных.
Recovery Time Objective (RTO) — это максимальное допустимое время восстановления системы до нормального состояния после сбоя. Отражает способность бизнес-системы восстанавливаться после катастрофы.
Последовательность операций, выполняемых как единая логическая единица. Несколько операций передаются в базу данных как неделимое целое — либо все выполняются успешно, либо ни одна не выполняется — и должны полностью удовлетворять свойствам ACID.
В реляционных базах данных транзакция может быть одним SQL-запросом, группой операторов или всей программой. Она является базовой единицей для восстановления базы данных и управления параллелизмом, обычно начинается с BEGIN/START TRANSACTION и завершается END/COMMIT.
Базы данных позволяют нескольким параллельным транзакциям читать, записывать и изменять данные. Изоляция предотвращает несогласованность данных, вызванную параллельным выполнением. SQL определяет четыре уровня изоляции в порядке убывания строгости:
Наиболее часто обозначает Segment Instance — экземпляр узла хранения данных, по сути, независимую базу данных PostgreSQL, хранящую часть данных и выполняющую большую часть обработки запросов. Иногда относится к Segment Node — физическому серверу, на котором размещается один или несколько Segment Instance.
Segment Instance обычно включает Primary Instance и Mirror Instance (если включено зеркалирование):
Single Instruction, Multiple Data (SIMD) — это архитектура набора команд компьютера, позволяющая нескольким процессорным блокам одновременно выполнять одну и ту же инструкцию над разными данными.
SIMD широко используется в обработке изображений, аудио и научных вычислениях, значительно повышая вычислительную эффективность.
В MatrixGate (mxgate) слот — это процесс, записывающий данные в экземпляры Segment. После получения задачи загрузки данных mxgate создает определенное количество слотов на основе параметра --stream-prepared. Каждый слот выполняет INSERT INTO dest SELECT * FROM external для импорта внешних данных в сегменты YMatrix. Продолжительность каждой передачи данных задается параметром --interval. Например, если --interval установлен в 100, каждый слот передает данные каждые 100 мс.
Обозначает резервный узел (экземпляр) Master.
Пользователи могут по желанию развернуть резервный или зеркальный экземпляр Master на хосте, отличном от основного Master. Когда Master становится недоступным, Standby принимает на себя роль теплого резерва.
Standby остается синхронизированным с Master через потоковую репликацию. На Standby запущен процесс репликации, отвечающий за синхронизацию данных между хостами Master и Standby.
Графический интерфейс YMatrix, используемый для визуальной установки, управления и мониторинга. Предоставляет богатый функционал с простым интерфейсом.
Текущие возможности включают:
Пользовательская функция. Функция, созданная пользователем в базе данных.
UDF создаются с помощью оператора CREATE FUNCTION, изменяются с помощью ALTER FUNCTION и удаляются с помощью DROP FUNCTION. Каждое допустимое имя UDF database_name.owner_name.function_name должно быть уникальным.
Write-Ahead Logging (WAL) — это эффективный механизм журналирования в базах данных. Для баз данных, не использующих только память, операции вставки, обновления и удаления сначала записываются в специальный файл журнала, прежде чем применяться к фактическим данным. В случае сбоя база данных может быть восстановлена до известного согласованного состояния с помощью WAL, что обеспечивает целостность данных.
Векторизованный движок выполнения в YMatrix использует эту модель для итеративных вычислений.
Подобно модели Volcano, она генерирует дерево запроса и использует выполнение по запросу (pull-based). Ключевое отличие заключается в том, что каждая итерация возвращает пакет кортежей, а не один. Преимущества включают снижение накладных расходов на итерации и лучшее использование аппаратных возможностей, таких как SIMD, что делает ее особенно подходящей для столбцового хранения.
Векторизованный движок выполнения, также известный как MatrixVector, — это высокопроизводительный движок, разработанный для столбцовой организации хранения (например, MARS3, MARS2, AOCO). Он обеспечивает повышение производительности на один-два порядка по сравнению с традиционными движками, основанными на строках, для типичных запросов.
Повышение производительности векторизованного исполнителя по сравнению со скалярными движками (например, Volcano) достигается за счет:
Разреженный индекс — это структура индексирования, предназначенная для оптимизации хранения и извлечения данных. В отличие от плотных индексов, содержащих запись для каждого элемента данных, разреженные индексы включают записи только для выбранных элементов — обычно тех, которые физически расположены близко друг к другу. Разреженные индексы часто используются в больших наборах данных с высокой повторяемостью значений, где редкие значения не индексируются для экономии места.
Служба, обеспечивающая высокую доступность за счет сбора и управления информацией о состоянии узлов.
YMatrix использует кластер ETCD для реализации этой службы. При сбое узла базы данных ETCD использует сохраненные данные о состоянии для повышения работоспособного узла до роли новой первичной ноды, обеспечивая доступность кластера.
Например:
Эта служба включает два основных компонента: автоматическое переключение на резерв (failover) и автоматическое восстановление (failback, поддерживается инструментом mxrecover), что обеспечивает полное восстановление узлов.
Сокращение от Auto Partition Management.
Набор UDF, предоставляемых YMatrix для управления разделами, позволяющий DBA вручную поддерживать разделы в соответствии с требованиями, снижая затраты на обслуживание. Функции включают:
Ключевые возможности: