EXASOL AG

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:15, 23 марта 2018.
EXASOL AG
Exasol Logo.png
Разработчики: Exasol AG
Операционная система: Кроссплатформенность
Тип ПО: проприетарная СУБД для аналитики
Веб-сайт https://www.exasol.com

Exasol [Источник 1] - это параллельная система управления реляционными базами данных (RDBMS), которая работает на кластере стандартных серверов компьютерного оборудования. Следуя модели SPMD, на каждом узле идентичный код выполняется одновременно. Данные хранятся в столбце-ориентированном виде и используются собственные методы сжатия в памяти. Компания утверждает, что настройки не нужны, поскольку база данных включает в себя некоторую автоматическую самооптимизацию (например, автоматические индексы, статистику таблиц и распространение данных). Exasol предназначен для работы в памяти, хотя данные постоянно хранятся на диске в соответствии с правилами ACID. Exasol поддерживает SQL Standard 2003 и может быть интегрирован через стандартные интерфейсы, такие как ODBC, JDBC или ADO.NET. Кроме того, SDK предоставляется для встроенной интеграции. Для приложений OLAP расширение MDX SQL поддерживается через ODBO и XMLA. Модель лицензии основывается на выделенной ОЗУ для программного обеспечения базы данных и не зависит от физического оборудования. Клиенты получают максимальную производительность, если их сжатые активные данные вписываются в лицензионную ОЗУ, но также могут быть намного больше.

Особенности Exasol

Exasol базируется на трех основных концепциях[Источник 2]:

Массивно-параллельная архитектура (MPP)

SQL-запросы выполняются параллельно на всех нодах, максимально используя все доступные ресурсы: ядра процессоров, память, диски, сеть. Понятие «мастер ноды» отсутствует — все серверы в системе равнозначны. Отдельные стадии выполнения одного запроса также могут идти параллельно. При этом частично рассчитанные результаты передаются в следующую стадию, не дожидаясь окончания предыдущей.

columnar store

Колоночное хранение

Exasol хранит данные в колоночной форме, а не в форме отдельных рядов, как в классических СУБД. Каждая колонка хранится отдельно, разделяется на большие блоки, сортирируется, сжимается и равномерно распределяется по всем нодам.

Эффективность сжатия сильно варьируется в зависимости от типов данных и распределения значений в таблицах.

Колоночное хранение позволяет многократно ускорять аналитические запросы, а также вычитывать только те данные, которые необходимы для выполнения запроса. В классических СУБД необходимо прочитать весь ряд целиком, даже если в нем используется всего одна колонка.

In-memory analytics

В Exasol есть механизм, похожий на buffer pool в MySQL или shared buffer в PostgreSQL. Блоки данных, однажды загруженные с диска, остаются в памяти и могут быть повторно использованы для последующих запросов. Как правило, в реальной жизни пользователи работают в первую очередь с «горячими» данными (последний день, неделя, месяц). Если у кластера достаточно памяти, чтобы вместить их целиком, то Exasol не будет трогать диск вообще.


Эти три концепции, собранные вместе в одной СУБД, показывают высокую производительность относительно сложности SQL-запросов и используемого «железа».

Так же не стоит забывать про эти ключевые характеристики:

  • Поддерживает стандарт ANSI SQL 2008;
  • Хорошо интегрируется с большинством BI инструментов;
  • Java-based интерфейс к Hadoop’s HDFS.

За счет чего достигается высокая производительность, помимо перечисленных выше концепций.

Отличие от других распределенных СУБД

Exasol умеет делать очень быстрые джойны, причем совершенно не смущается от их количества. Джойны бывают глобальные и локальные. Глобальный джойн происходит в тех случаях, когда объединяемые данные физически хранятся на разных нодах. Локальный джойн происходит тогда, когда объединяемые данные хранятся на одной ноде.

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

При добавлении или удалении данных в таблицах с уже существующими индексами создаются «дельты», которые содержат только изменения. Если изменений накапливается слишком много (около 20% от общего объема), то происходит INDEX MERGE, который объединяет основной индекс с дельтой, после чего дельта удаляется. Это намного быстрее, чем полное пересоздание индекса с нуля. Механизм чем-то похож на Sphinx.

Индексы занимают относительно небольшой объем памяти. Размер индекса определяется количеством входящих в него колонок, их типами данных и вариабельностью значений.

Главное отличие Exasol от других распределенных СУБД[Источник 3] состоит в том, что вам не придется бояться глобальных джойнов и нет нужды создавать специальные проекции, чтобы их избежать. Безусловно, глобальные джойны медленнее локальных, но не настолько, чтобы это создавало проблемы. Подавляющее большинство джойнов в Badoo именно глобальные.

Возможности и особенности SQL

Exasol полностью поддерживает базовый ANSI SQL. Это включает в себя GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, MERGE, FULL JOIN, DISTINCT и т.д. С точки зрения аналитического SQL, предлагается следующее:

  • Window-функции, ROW_NUMBER, медианы, ранги, перцентили на любой вкус;
  • Common Table Expressions;
  • CUBE, ROLLUP, GROUPING SETS;
  • GROUP_CONCAT;
  • регулярные выражения PCRE, включая поиск, захват паттернов и их замену;
  • функции для работы с датами и таймзонами;
  • Geospatial-функции.

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

Транзакции

Exasol — транзакционная СУБД. Уровень изоляции — serializable. На практике в текущей реализации это означает, что в таблицу параллельно может писать только один писатель. Читателей может быть сколько угодно, и они не блокируются писателем. «Параллельные писатели» будут выполняться последовательно друг за другом, либо, в случае конфликтов и дедлоков, произойдет ROLLBACK. DDL-запросы также транзакционны. Это означает, что вы можете создавать новые таблицы, добавлять колонки и т.д. — все это может происходить в одной транзакции. При необходимости можно легко сделать ROLLBACK и вернуть все как было.

Из-за колоночной структуры хранения, добавление и удаление колонок происходит практически моментально. Никаких простоев из-за долгих «альтеров» при изменении схемы таблиц на практике нет.

Импорт данных

Наиболее эффективно импортировать данные в Exasol при помощи встроенной утилиты exajload. Она максимально использует возможности управления потоками и параллельного подключения сразу к нескольким нодам. Разрешается передавать сжатый поток данных без предварительной декомпрессии, что заметно снижает нагрузку на сеть. Поддерживаемые форматы: gz, zip, bz2. Для аналитических СУБД актуален вопрос эффективной загрузки данных из Hadoop. Exasol позволяет напрямую загружать файлы в несколько потоков при помощи WebHDFS, минуя промежуточные серверы и снижая общий overhead.

Благодаря транзакционности можно также загружать данные напрямую в production-таблицу, целиком минуя staging. Если загрузка прервется (по любой причине), то произойдет ROLLBACK, и у вас останется старая копия таблицы. Если загрузка успешно завершится, то новые данные заменят старые. Как и во многих других аналитических СУБД, в Exasol намного эффективнее подход ELT (Extract — Load — Transform), нежели классический ETL (Extract — Transform — Load). Лучше загружать «сырые» данные в промежуточную таблицу, а затем трансформировать их средствами самой СУБД, при этом используя все достоинства Massive Parallel Processing.

Примеры

Данные скрипты предназначены для создания учебной БД.

Будет создана БД с прикрепленным кодом, объём которой имеет только 10 МБ. Приблизительный внешний вид БД :-

Имя таблицы START_BIG START_SMALL
Продажи 350000 2000000
Торговые агенты 10000 100000


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

Также сюда входит файл примеров операторов SQL, которые могут быть запущены как для самой БД, так и с помощью файла COUNTRY.CSV, который можно подгрузить.

drop schema start_small cascade;
create schema start_small;
-- this small version has around 350,000 sales, 10,000 sales agents, 1,000 sales territories 

create table sales as
 
select cast(trunc(random(1,10000)) as int) sales_agent_id, 
current_date-random()*1000 sales_date, 
cast(trunc(RANDOM(1, 100000),2) as decimal(10,2)) software_sales,
cast(trunc(RANDOM(1, 10000),2) as decimal (10,2)) services_sales,
trunc(RANDOM(10,30),0) sales_commission_percent
from (select row_number() over (order by 1)
from exa_time_zones a, exa_time_zones b);

create table sales_agent 
(sales_agent_id integer identity,
sales_agent_name varchar(100) default 'Unknown',
sales_territory_id integer);

insert into sales_agent(sales_territory_id) 
(select cast(trunc(random(1,1000)) as int) sales_territory_id 
from (select row_number() over (order by 1)
from exa_time_zones, exa_time_zones)
limit 10000);

create table sales_territory 
(sales_territory_id integer identity,
sales_territory_name varchar(100) default 'Unknown',
country_id integer);


insert into sales_territory(country_id) 
(select cast(trunc(random(1,620)) as int) country_id 
from (select row_number() over (order by 1)
from exa_time_zones a, exa_time_zones b)
limit 1000);


CREATE TABLE COUNTRY (
    COUNTRY_ID        DECIMAL(18,0),
    COUNTRY_NAME      VARCHAR(100) UTF8,
    ANTHEM_NAME       VARCHAR(2000) UTF8,
    CAPITAL_CITY      VARCHAR(2000) UTF8,
    CONTINENT_NAME    VARCHAR(2000) UTF8,
    COUNTRY_LONG_NAME VARCHAR(2000) UTF8,
    NATIONALITY_NAME  VARCHAR(2000) UTF8,
    USA_COMPARISON    VARCHAR(2000) UTF8
);

За более подробными примера обращайтесь по ссылке : https://github.com/EXASOL/opendata-examples

Пример установки

Пример установки Exasol Small Business Edition. [Источник 4]

Источники

  1. Wikipedia. URL: https://en.wikipedia.org/wiki/Exasol (дата обращения:19.10.2017)
  2. EXASOL AG // Официальный сайт. URL: https://www.exasol.com/en/customers/ (дата обращения:19.10.2017)
  3. Habr-Habr // Опыт использования Exasol. URL: https://habrahabr.ru/company/badoo/blog/271753/ (дата обращения:19.10.2017)
  4. Youtube\\Offical channel. URL: https://www.youtube.com/channel/UCHU3dJa1nMQiNRklKVIjLng (дата обращения:19.10.2017)