В качестве тестовых данных буду использовать данные КЛАДР (~223 тыс. записей) в качестве среды выполнения запросов DBeaver в котором настроены два подключения к Ignite и Oracle. И первое что сделаю импортирую данные в таблицы, Данные КЛАДР из DBF переведу в CSV, а затем средствами DBeaver выполню импорт в таблицы.
Ignite сконфигурирован так же для хранение данных в постоянном хранилище.
config\default-config.xml
<!-- Enabling Apache Ignite Persistent Store. -->
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="persistenceEnabled" value="true"/>
</bean>
</property>
</bean>
</property>
Структура таблицы Kladr
CREATE TABLE Kladr (
NAME VARCHAR,
CODE VARCHAR,
SOCR varchar,
INDEX VARCHAR, PRIMARY KEY (CODE))
WITH "affinityKey=CODE";
affinityKey=CODE — означает что данные в Ignite будут распределены по partition и еще распределены по двум узлам. Два узла обеспечены запуском двух экземпляров Ignite.
Еще одна не большая таблица SOCRBASE, это справочник сокращений, у него другое правило хранения в распределенной сети.
CREATE TABLE Socrbase (
LEVEL LONG,
SCNAME VARCHAR,
SOCRNAME VARCHAR,
KOD_T_ST LONG,
PRIMARY KEY (KOD_T_ST))
WITH "template=replicated";
WITH «template=replicated» — таблица будет в полном объеме на каждом узле. Тогда каждый узел когда получив join запрос сможет соединить свои данные с этим справочником, при другой модели хранения нужно было бы обеспечить согласованность partition таблиц.
Вот запущенные две node
первая:
вторая:
Для Orcale структура та же, за исключением partition.
Persistent — хранилище Ignite на диске выглядит как распределение по партициям (файлам), всего их для каждого узла 1024, т.е. все данные для узла распределены в 1024 блока, причем какие то из них находятся на первом узле, а другие на втором.
Пример одного узла
Во время выполнения запросов Ignite будет делать распределенный запрос на узлы, те в свою очередь собирать те данные которые у них есть, затем данные будут консолидироваться и отправляться в итоговой выборке.
Итак первое — это импорт данных средствами DBeaver из CSV, 223 тыс. записей. Вот первый результат.
Импорт данных 223 тыс. записей (КЛАДР) | |
Ignite 12 мин | Oracle 5 сек. |
Далее выполню несколько несложных запросов на поиск данных для сравнения, за результат буду брать второе выполнение подряд (оно всегда меньше для двух БД).
Получить 100 записей КЛАДР по любым 100 CODE, по CODE есть индекс
|
|
Ignite 30 мсек. | Oracle 6 мсек. |
Получить 100 записей КЛАДР по любым 100 NAME, по NAME нет индекса
|
|
Ignite 80 мсек. | Oracle 6 мсек. |
Посчитать количество субъектов в регионе
|
|
Ignite 30 мсек. | Oracle 6 мсек. |
Количество субъектов в регионе более 1000
|
|
Ignite 150 мсек. | Oracle 60 мсек. |
Join запрос. Получить 100 субъектов первого уровня
|
|
Ignite 280 мсек. | Oracle 2 мсек. |
Join запрос. Количество субъектов на уровнях
|
|
Ignite 13 сек. | Oracle 140 мсек. |
Да в последнем случае именно 13 сек. показал Ignite запрос, что то с join не все хорошо, правда введение условия ограничивающего данные, уменьшает это время.
Наверное этих сравнений достаточно, не буду делать пока вывод, продолжу изучение Ignite…
Материалы:
Ignite
Getting Started
Getting Started SQL
Комментарии (12)
ggo
09.01.2018 09:38Изучение нового похвально.
Но подход к оценке и сравнению решений — очень недальновиден. Основная ниша Ignite — обработка и хранение данных, которые физически лежат на большом количестве узлов. Это примерно как сравнивать git и google drive. И тот и другой можно в общем случае использовать для архивирования локальных файлов и истории изменений.arylkov Автор
09.01.2018 10:31меня и настораживает что как раз Ignite пытаются использовать как SQL БД, это видимо не лучшая его сторона
GlukKazan
09.01.2018 11:26Собственно дело не в SQL (это просто полезная возможность). Ignite ориентирован на хорошую масштабируемость пропускной способности при обработке больших объёмов данных. Как правило, в тех случаях, когда не требуется хорошее время отклика (которое вы как раз меряете). Oracle пытается оптимизировать и то и другое, но больше всё таки про время отклика. Ну и конфигурация. 2 узла на одной машине — это просто чтобы посмотреть что оно работает. Мерять в такой конфигурации производительность — немножко странно.
Было бы гораздо интереснее посмотреть на тест, построенный таким образом, чтобы Ignite обрабатывал данные быстрее чем Oracle (пусть даже XE без партиционирования).
arylkov Автор
09.01.2018 10:28не было задачи сравнивать в полном объеме, т.к. действительно задачи решают они разные
Yo1
09.01.2018 15:07+1было бы интересно почитать что там реально выходит с персистент на тему сбоев. все ли как в документации и презенташках. на сколько можно положиться на сохранность
Andronas
09.01.2018 22:25Цитата «Настройка БД будет в обоих случаях во многом по умолчанию»
Ваши тесты лишь говорят что настройки по умолчанию у Оракла более оптимальны чем у такие же настройки у Ignite. Не более того.
Hixon10
Статья выглядит несколько странной, если честно.
1)
Почему не третье? Не десятое? Что вы тут хотите проверять: на сколько хорошо данные в кэш попадают, или скорость выполнения запросов?
2)
Так а зачем замерять скорость записи с помощью какого-то стороннего инструмента? У нас есть гарантии, что данные для обоих случаев вставляются одинаково? А не, например, в оракле батчем, а в Игнайте — строка за строкой.
3) Какая цель сравнения инструментов? Оракл — один из лидеров классических персистентных RDBMS. В игнайте SQL-интерфейс добавлен, как маркетинговая фича, и вообще это инмемори кэш, который (как и его конкурент Hazelcast) может персистить данные.
arylkov Автор
Специально сравнивать не было задачи, с Oracle работал с Ignite предстоит, само собой стало интересно как же там будут решаться подобные задачи.
smitevg
Занимался подобными задачами.
Сложности в замене Oracle на GridGain
Самые важные:
1. Изменение схемы данных
2. Изменение данных на ПРОДе (как будем менять)
3. Консистентность. Драматичная просадка производительности при ее гарантировании. Но это не точно.