Перейти к основному содержимому

Возможности базы данных

Selena предлагает богатый набор функций для обеспечения молниеносной аналитики в реальном времени на больших объемах данных.

MPP фреймворк

Selena использует фреймворк массивно-параллельной обработки (MPP). Один запрос разделяется на несколько физических вычислительных единиц, которые могут выполняться параллельно на нескольких машинах. Каждая машина имеет выделенные ресурсы CPU и памяти. MPP фреймворк полностью использует ресурсы всех ядер CPU и машин. Производительность одного запроса может непрерывно увеличиваться по мере масштабирования кластера.

MPP

На предыдущем рисунке Selena разбирает SQL-выражение на несколько логических единиц выполнения (фрагментов запроса) в соответствии с семантикой выражения. Затем каждый фрагмент реализуется одной или несколькими физическими единицами выполнения (экземплярами фрагментов) в зависимости от сложности вычислений. Физическая единица выполнения является наименьшей единицей планирования в Selena. Они будут запланированы для выполнения на бэкендах (BE). Одна логическая единица выполнения может содержать один или несколько операторов, таких как операторы Scan, Project и Agg, как показано в правой части рисунка. Каждая физическая единица выполнения обрабатывает только часть данных, и результат будет объединен для генерации финальных данных. Параллельное выполнение логических единиц выполнения полностью использует ресурсы всех ядер CPU и физических машин и ускоряет скорость запросов.

MPP

В отличие от фреймворка Scatter-Gather, используемого многими другими системами аналитики данных, MPP фреймворк может использовать больше ресурсов для обработки запросов. В фреймворке Scatter-Gather только узел Gather может выполнять финальную операцию слияния. В MPP фреймворке данные перемешиваются на несколько узлов для операций слияния. Для сложных запросов, таких как Group By по полям с высокой кардинальностью и соединения больших таблиц, MPP фреймворк Selena имеет заметные преимущества в производительности по сравнению с фреймворком Scatter-Gather.

Полностью векторизованный движок выполнения

Полностью векторизованный движок выполнения более эффективно использует вычислительную мощность CPU, поскольку этот движок организует и обрабатывает данные в колоночном формате. В частности, Selena хранит данные, организует данные в памяти и вычисляет SQL операторы полностью в колоночном формате. Колоночная организация полностью использует кэш CPU. Колоночные вычисления уменьшают количество вызовов виртуальных функций и ветвлений, что приводит к более эффективным потокам инструкций CPU.

Векторизованный движок выполнения также полностью использует SIMD инструкции. Этот движок может выполнить больше операций с данными с меньшим количеством инструкций. Тесты на стандартных наборах данных показывают, что этот движок повышает общую производительность операторов в 3-10 раз.

В дополнение к векторизации операторов, Selena реализовала другие оптимизации для движка запросов. Например, Selena использует технологию Operation on Encoded Data для прямого выполнения операторов на закодированных строках без необходимости декодирования. Это заметно снижает сложность SQL и увеличивает скорость запросов более чем в 2 раза.

Разделение хранения и вычислений

Архитектура разделения хранения и вычислений была введена начиная с версии 1.5.0. В этой архитектуре вычисления и хранение разделены для достижения изоляции ресурсов, эластичного масштабирования вычислительных узлов и высокопроизводительных запросов. Разделение хранения и вычислений обеспечивает Selena лучшей гибкостью, более высокой производительностью и доступностью данных, а также более низкой стоимостью.

shared-data

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

Уровень хранения использует практически неограниченную емкость и высокую надежность объектного хранения для достижения массивного хранения данных и постоянства данных. Selena может работать с различными системами объектного хранения, такими как AWS S3, Google Cloud Storage, Azure Blob Storage, HDFS и другими S3-совместимыми хранилищами, такими как MinIO.

Пользователи могут выбрать развертывание Selena в публичных облаках, частных облаках или локальных центрах обработки данных. Selena поддерживает развертывания на основе Kubernetes и предоставляет Operator для автоматизированного развертывания кластеров с разделенным хранением и вычислениями.

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

Оптимизатор на основе стоимости

CBO

Производительность запросов с соединением нескольких таблиц сложно оптимизировать. Только движки выполнения не могут обеспечить превосходную производительность, поскольку сложность планов выполнения может различаться на несколько порядков в сценариях запросов с соединением нескольких таблиц. Чем больше связанных таблиц, тем больше планов выполнения, что делает выбор оптимального плана NP-сложной задачей. Только достаточно превосходный оптимизатор запросов может выбрать относительно оптимальный план запроса для эффективной многотабличной аналитики.

Selena разрабатывает совершенно новый CBO с нуля. Этот CBO использует cascades-подобный фреймворк и глубоко настроен для векторизованного движка выполнения с рядом оптимизаций и инноваций. Эти оптимизации включают повторное использование общих табличных выражений (CTE), переписывание подзапросов, Lateral Join, переупорядочивание Join, выбор стратегии для распределенного выполнения Join и оптимизацию низкой кардинальности. CBO поддерживает в общей сложности 99 SQL-выражений TPC-DS.

CBO позволяет Selena обеспечивать лучшую производительность запросов с соединением нескольких таблиц по сравнению с конкурентами, особенно в сложных запросах с соединением нескольких таблиц.

Колоночный движок хранения с обновлениями в реальном времени

Selena является колоночным движком хранения, который позволяет данным одного типа храниться непрерывно. В колоночном хранении данные могут быть закодированы более эффективным способом, увеличивая коэффициент сжатия и снижая стоимость хранения. Колоночное хранение также уменьшает общее количество операций чтения данных I/O, улучшая производительность запросов. Кроме того, в большинстве OLAP сценариев запрашиваются только определенные столбцы. Колоночное хранение позволяет пользователям запрашивать только часть столбцов, значительно уменьшая дисковые I/O.

Selena может загружать данные в течение секунд для аналитики в режиме, близком к реальному времени. Движок хранения Selena гарантирует атомарность, согласованность, изоляцию и долговечность (ACID) каждой операции приема данных. Для транзакции загрузки данных вся транзакция либо успешна, либо неудачна. Параллельные транзакции не влияют друг на друга, обеспечивая изоляцию на уровне транзакций.

Realtime

Движок хранения Selena использует паттерн Delete-and-insert, который позволяет эффективные операции Partial Update и Upsert. Движок хранения может быстро фильтровать данные, используя индексы первичных ключей, устраняя необходимость в операциях Sort и Merge при чтении данных. Движок также может полностью использовать вторичные индексы. Он обеспечивает быструю и предсказуемую производительность запросов даже при огромных объемах обновлений данных.

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

Selena использует интеллектуальные материализованные представления для ускорения запросов и создания слоев хранилища данных. В отличие от материализованных представлений других подобных продуктов, которые требуют ручной синхронизации данных с базовой таблицей, материализованные представления Selena автоматически обновляют данные в соответствии с изменениями данных в базовой таблице без требования дополнительных операций обслуживания. Кроме того, выбор материализованных представлений также автоматический. Если Selena определяет подходящее материализованное представление (MV) для улучшения производительности запроса, она автоматически перепишет запрос для использования MV. Этот интеллектуальный процесс значительно повышает эффективность запросов без требования ручного вмешательства.

MV Selena может заменить традиционный процесс моделирования данных ETL: Вместо преобразования данных в upstream приложениях, теперь у вас есть возможность преобразовывать данные с помощью MV внутри Selena, упрощая конвейер обработки данных.

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

MV

Аналитика озера данных

DLA

В дополнение к эффективной аналитике локальных данных, Selena может работать как вычислительный движок для анализа данных, хранящихся в озерах данных, таких как Apache Hive, Apache Iceberg, Apache Hudi и Delta Lake. Одной из ключевых особенностей Selena является ее external catalog, который действует как связующее звено с внешне поддерживаемым метахранилищем. Эта функциональность предоставляет пользователям возможность беспрепятственно запрашивать внешние источники данных, устраняя необходимость в миграции данных. Таким образом, пользователи могут анализировать данные из различных систем, таких как HDFS и Amazon S3, в различных форматах файлов, таких как Parquet, ORC и CSV и т.д.

Предыдущий рисунок показывает сценарий аналитики озера данных, где Selena отвечает за вычисления и анализ данных, а озеро данных отвечает за хранение, организацию и обслуживание данных. Озера данных позволяют пользователям хранить данные в открытых форматах хранения и использовать гибкие схемы для создания отчетов на основе "единого источника истины" для различных случаев использования BI, AI, ad-hoc и отчетности. Selena полностью использует преимущества своего векторизационного движка и CBO, значительно улучшая производительность аналитики озера данных.