Сегодня я хочу рассказать вам о проекте с открытым исходным кодом под названием Багри .
Bagri — это распределенная база данных документов или, как сейчас модно говорить, база данных NoSQL, написанная на Java и спроектированная с учетом требований, используемых в основном в корпоративном секторе, таких как высокая доступность, отказоустойчивость, масштабируемость и поддержка транзакций.
Когда имеет смысл использовать Багри?
Систему удобно использовать прежде всего в тех случаях, когда документооборот основан на 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 и настраиваем его четыре основных параметра: адрес удаленного сервера, имя схемы, имя пользователя и пароль.
Получаем XQJ-соединение:<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“/>
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
-
Оптимальный Код?
19 Oct, 24 -
Контролируйте Свои Эмоции!
19 Oct, 24