- PVSM.RU - https://www.pvsm.ru -
В конце июля вышла версия Apache Ignite 2.1. Apache Ignite — распределенная свободная HTAP-платформа (HTAP — Hybrid Transactional and Analytical Processing, системы, которые могут обрабатывать как транзакционную, так и аналитическую нагрузку) для хранения данных в оперативной памяти и на диске, а также вычислений в реальном времени. Ignite написан на Java и может быть плотно интегрирован с .NET и C++.
Версия 2.1 очень богата на значимые, практически применимые функции, базирующиеся на фундаменте, заложенном в Apache Ignite 2.0.
С Apache Ignite 2.1 можно использовать распределенное дисковое хранилище Apache Ignite Persistent Data Store с поддержкой SQL, первые распределенные алгоритмы машинного обучения, новые функции DDL, и кроме того значительно улучшена поддержка платформ .NET и C++.
Persistent Data Store выводит Apache Ignite в новый сегмент — теперь это не просто in-memory data grid, но полноценная распределенная масштабируемая база данных HTAP с возможностью надежного хранения первичных данных, с поддержкой SQL и обработкой информации в реальном времени.
Persistence Data Store — новый компонент платформы, который позволяет использовать для хранения данных не только RAM, но и диск.
Мы вложили столько труда программистов в разработку PDS из-за ограничений классических сторонних СУБД при использовании их в связке с системами, подобными Apache Ignite.
Реализация PDS позволила нам организовать распределенное, горизонтально масштабируемое хранилище, которое ограничено по объему в первую очередь доступными физическими дисковыми массивами, и которое решает описанные выше проблемы.
При этом PDS обеспечивает более высокий уровень производительности, чем сторонние продукты за счет отсутствия лишнего сетевого взаимодействия.
По умолчанию страница создается и поддерживается в памяти, но когда доступный объем исчерпывается, страница вытесняется на диск. Далее при запросе данных с этой страницы она вернется назад в память.
Индексы лежат на отдельных страницах, и при грамотно построенных запросах поиск должен идти по данным в индексах, которые содержаться в памяти, чтобы избежать полного сканирования и последовательного поднятия всего массива информации с диска.
Persistence Data Store очень легко включить:
<bean id="ignite.cfg"
class="org.apache.ignite.configuration.IgniteConfiguration">
<!-- … -->
<property name="persistentStoreConfiguration">
<bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/>
</property>
<!-- … -->
</bean>
или
igniteConfiguration.setPersistentStoreConfiguration(
new PersistentStoreConfiguration());
Важно! При этом поменяется процедура запуска кластера. После старта всех узлов будет необходимо будет активировать кластер, например, в web-консоли, либо вызвав ignite.activate(true)
в коде. Это необходимо для того, чтобы убедиться, что все узлы, которые хранят в себе информацию, вошли в строй и готовы работать со своей частью набора данных. В ином случае кластер считал бы, что часть первичных или резервных копий данных отсутствует и начал бы ребалансировку (перераспределение копий данных между узлами, чтобы обеспечить необходимый уровень резервирования и равномерность распределения нагрузки), что не является желаемым поведением.
Резюмируя, Persistent Data Store выводит Apache Ignite в новый сегмент, позволяя пользователям использовать Ignite не только как систему обработки данных, но и как горизонтально масштабируемый слой первичного хранения.
В Apache Ignite 2.1 появились первые практически применимые распределенные алгоритмы машинного обучения, основанные на технологиях Apache Ignite 2.0 [1] — кластеризация методом k-средних (k-means) [2] и множественная линейная регрессия методом наименьших квадратов [3].
Использовать их достаточно несложно, и это «первые ласточки»: в последующих версиях мы будем добавлять новые алгоритмы, которые можно будет использовать для различных целей.
KMeansLocalClusterer clusterer =
new KMeansLocalClusterer(new EuclideanDistance(), 1, 1L);
double[] v1 = new double[] {1959, 325100};
double[] v2 = new double[] {1960, 373200};
DenseLocalOnHeapMatrix points =
new DenseLocalOnHeapMatrix(new double[][] {v1, v2});
KMeansModel mdl = clusterer.cluster(points, 1);
Integer clusterInx =
mdl.predict(
new DenseLocalOnHeapVector(new double[] {20.0, 30.0}));
Моделью распределения данных можно управлять, используя разные реализации матриц и векторов. Так DenseLocalOnHeapMatrix использует хранение данных только на локальном узле в управляемой куче JVM.
В Apache Ignite 2.1 расширена поддержка DDL. Если в Apache Ignite 2.0 появилась работа с индексами [1], то новая версия даёт возможность работать с таблицами [4]: CREATE TABLE
и DROP TABLE
.
CREATE TABLE IF NOT EXISTS Person (
age int, id int, name varchar, company varchar,
PRIMARY KEY (name, id))
WITH "template=replicated,backups=5,affinitykey=id";
DROP TABLE Person;
Таблицы создаются в схеме PUBLIC, для каждой из них создается новый кеш. Таблицы имеют дополнительные настройки, которые можно задавать в разделе WITH:
PARTITIONED
и REPLICATED
, которые указывают использовать настройки по умолчанию и соответствующую модель распределения кеша.ATOMIC
и TRANSACTIONAL
, то есть включает или выключает транзакционность на данном кеше.
В будущих релизах планируется добавить возможность задавать колонки как NOT NULL
, указывать значения по-умолчанию, параметр AUTO INCREMENT
и т.д., а также хотим расширять словарь DDL-выражений.
В Apache Ignite 2.1 появилась возможность использовать группы кешей [5], которые делят внутри себя общее хранилище, партиции, позволяя при этом хранить различные виды значений. Этот подход позволяет значительно сократить накладные расходы на заведение большого количества кешей как с точки зрения необходимого пространства в памяти, так и с точки зрения процессорных ресурсов на ведение и синхронизацию информации по этим кешам.
При этом такие группы будут иметь общий физический кеш, соответственно, и такие его компоненты как affinity-функцию, node filter, режим работы кеша, политику обработки потери партиций, политику утилизации памяти.
Автор: artemshitov
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/263654
Ссылки в тексте:
[1] реализованных в Apache Ignite 2.0: https://habrahabr.ru/company/gridgain/blog/329318/
[2] кластеризация методом k-средних (k-means): https://apacheignite.readme.io/v2.1/docs/k-means-clustering
[3] множественная линейная регрессия методом наименьших квадратов: https://apacheignite.readme.io/v2.1/docs/ols-multiple-linear-regression
[4] работать с таблицами: https://apacheignite.readme.io/v2.1/docs/distributed-ddl
[5] группы кешей: https://issues.apache.org/jira/browse/IGNITE-5075
[6] тонкий JDBC-драйвер: https://apacheignite.readme.io/v2.1/docs/jdbc-driver
[7] DML через LINQ: https://issues.apache.org/jira/browse/IGNITE-4904
[8] распределенных вычислений на C++: https://apacheignite-cpp.readme.io/v2.1/docs/distributed-closures
[9] Источник: https://habrahabr.ru/post/335294/
Нажмите здесь для печати.