Багри — База Данных Nosql С Открытым Исходным Кодом, Построенная На Основе Распределенного Кеша.

Сегодня я хочу рассказать вам о проекте с открытым исходным кодом под названием Багри .

Bagri — это распределенная база данных документов или, как сейчас модно говорить, база данных NoSQL, написанная на Java и спроектированная с учетом требований, используемых в основном в корпоративном секторе, таких как высокая доступность, отказоустойчивость, масштабируемость и поддержка транзакций.



Багри — база данных NoSQL с открытым исходным кодом, построенная на основе распределенного кеша.
</p><p>



Когда имеет смысл использовать Багри?

Систему удобно использовать прежде всего в тех случаях, когда документооборот основан на XML. Это финансы, логистика, страхование, медицина и другие отрасли, где формат документов, которыми обмениваются участники, строго определен корпоративными XSD-схемами.

Система позволяет не парсить каждый входящий документ, а помещать его в базу данных как есть, а затем эффективно выполнять любые запросы к хранимым документам с помощью мощных инструментов XQuery 3.1. Bagri построен на основе продуктов распределенного кэширования, таких как Hazelcast, Coherence, Infinispan и других подобных систем.

Благодаря возможностям распределенного кэша Bagri сразу же поддерживает требования корпоративного сектора.

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

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

Поддержка проекта багри-расширения содержит расширения, разработанные командой (на данный момент реализован коннектор к MongoDB).

Используемый язык запросов: XQuery , в будущем планируется также поддержка синтаксиса SQL, это задача доступен на Github проекта.

Багри не требует предварительного знания схемы данных, а скорее генерирует словарь данных (уникальные пути в структурах документов) на лету при анализе входящих документов.

Что.

Багри полностью бессхемен и не требует перестроения таблицы для новых типов документов, т.е.

ему не нужны команды создания таблицы/добавления столбца в принципе.

Для связи между клиентом и сервером Багри предлагает два API: стандартный API XQJ, объявленный в ДжСР 225 и собственный XDM API, который предоставляет дополнительные функции, отсутствующие в XQJ. По сути, интерфейсы XQJ — это аналог функционала, предоставляемого драйвером JDBC при работе с реляционными базами данных.

Вместе с драйвером XQJ в систему входит официальный XQJ TCK, который вы можете запустить и убедиться, что драйвер на 100 % проходит все тесты XQJ.

Как в Багри используется функционал распределенного кэша

Все документы в Багри хранятся в схемах, ближайшим аналогом в реляционной базе данных (СУБД) является база данных.

В настоящее время используется распределенный кэш, на котором построена система.

Хейзелкаст и для каждой схемы выделяется отдельный кластер Hazelcast. Схемы существуют независимо друг от друга, т.е.

не происходит «борьбы» за ресурсы между схемами (в Hazelcast каждый кластер настраивается отдельно и имеет свой пул ресурсов).

Метаданные документа (пространства имен, типы документов, уникальные пути) хранятся в соответствующих кэшах и реплицируются между всеми узлами кластера.

Что.

Доступ на чтение метаданных на рабочих узлах осуществляется максимально быстро.

Сами данные документа отделены от метаданных и хранятся в распределенных кэшах, при этом данные, относящиеся к одному и тому же документу, всегда хранятся на одном и том же узле.

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

Клиент Bagri подключается к серверу, используя внутренние механизмы программного обеспечения клиента кэша.

Запросы XQuery на клиенте упаковываются в задания и выполняются на узлах сервера с использованием распределенной службы ExecutorService, предоставляемой платформой Hazelcast. Результаты возвращаются клиенту через выделенный асинхронный канал (очередь Hazelcast).



Конфигурация системы

Вся конфигурация системы хранится в двух файлах: access.xml для настроек ролей и пользователей и config.xml с настройками схем и расширений Bagri. Подробное описание формата этих файлов и всех используемых в них параметров можно прочитать в инструкции по установке и настройке системы .

Изменить настройки схемы можно непосредственно в файлах или через интерфейсы управления схемой JMX, развернутые на административном сервере Bagri.

Примеры работы с данными

Давайте теперь перейдем от теории к практике и посмотрим, как мы можем работать с Багри из нашего Java-кода через интерфейсы XQJ. Внутри контекста Spring мы объявляем bean-компонент BagriXQDataSource и настраиваем его четыре основных параметра: адрес удаленного сервера, имя схемы, имя пользователя и пароль.

  
  
   

<bean id="xqDataSource" class="com.bagri.xqj.BagriXQDataSource"> <property name="properties"> <props> <prop key="address">${schema.address}</prop> <prop key="schema">${schema.name}</prop> <prop key="user">${schema.user}</prop> <prop key="password">${schema.password}</prop> </props> </property> </bean> <bean id="xqConnection" factory-bean="xqDataSource" factory-method="getConnection“/>

Получаем XQJ-соединение:

context = new ClassPathXmlApplicationContext("spring/xqj-client-context.xml"); XQConnection xqc = context.getBean(XQConnection.class);

Затем читаем текстовый файл и создаем на его основе в Багри новый документ:

String content = readTextFile(fileName); String query = "declare namespace bgdm=\" http://bagridb.com/bagri-xdm\";\n " +

Теги: #NoSQL #Big Data #java #open source #open source #java #NoSQL #Big Data
Вместе с данным постом часто просматривают: