serge_gorshkov


Сергей Горшков - о бизнесе в сфере ИТ

о семантической интеграции, программировании, управлении...


Previous Entry Share Next Entry
MongoDB для хранения данных онтологии и другие новости
serge_gorshkov
Завершилась наша работа над Подсистемой поддержки принятия управленческих решений в одной большой автоматизированной системе. Здесь мы воплотили на практике и довели до индустриального уровня принцип логической витрины данных, о котором я уже писал (там, правда, было про big data, а здесь про Mongo - но и Hadoop у нас есть в другом похожем проекте, про него отдельно напишу). В общем, теперь идеи подтверждены не только реализацией, но и эксплуатацией.

Итак, представим, что у нас есть информация сложной и нестабильной структуры, для хранения и обработки которой онтологии просто необходимы. Еще и логический вывод задействован. Но при этом данных очень много (миллионы информационных объектов), они поступают непрекращающимся потоком, и работать с ними нужно с довольно высокой скоростью ответа, в реальном времени.RDF triple store тут не справится. Точнее, можно было бы попробовать с зарубежными решениями типа AllegroGraph, но наш заказчик такое купить не может. Поэтому мы пошли на маневр, который удался.

Прежде всего мы выделили классы, объекты которых поступают/обновляются в оперативном режиме - таких нашлось около десятка (не считая подклассов). Объектов остальных типов или немного, или они нужны нечасто. Большие/часто требуемые коллекции мы вынесли из графовой СУБД (Jena/Fuseki) в MongoDB. Ну, а дальше пишем витрину.
Все программные компоненты системы работают с информационной моделью через наш АрхиГраф.MDM, который в исконном смысле представляет собой API для доступа к графовой базе, где лежит онтология. В MDM вкручен диспетчер, который знает, благодаря настройкам, в каком хранилище какие данные расположены. MongoDB, Fuseki и HBase, про который я выше дал спойлер - это еще не все: в этом же решении мы, войдя во вкус, подключили в качестве источников SOAP- и REST-сервисы других серьезных автоматизированных систем, откуда наша может забирать данные. Структура информации, представленной во всех этих источниках, описана в онтологии. Программные компоненты, обращающиеся к MDM, делают запросы в терминах онтологии: дай нам объекты таких-то классов с такими-то атрибутами, и т.д. MDM незаметным для пользователя образом определяет, к каким источникам ей нужно обратиться, извлекает данные, объединяет полученные результаты (в ответе могут потребоваться данные сразу из нескольких хранилищ), и возвращает автору запроса.

По дороге пришлось решить множество проблем, например - контроль целостности (он затруднен, когда ссылки пересекают границы хранилищ). Отдельным удовольствием стало докручивание нашего движка логического вывода, чтобы он мог работать с данными из разных хранилищ и делал это с приемлемой скоростью. Конечно, тут пришлось пойти на некоторые функциональные ограничения в части мощности правил, но с другой стороны - ни один стандартный reasoner к такой задаче заведомо не пригоден.

А результат оказался вполне хорош. Поступающий поток информации обрабатывается правилами логического вывода, подвергается автоматической классификации, слиянию дублирующих сущностей и прочим интересным обработкам. В реальном времени вся информация выводится в разных видах в пользовательский интерфейс. Запросы, построенные в терминах онтологии, выполняются за доли секунды на Fuseki и MongoDB. Есть неограниченный потенциал подключения дополнительных источников информации благодаря возможности распространять ту же парадигму доступа на любые внешние источники, "пряча" их за онтологической моделью и совершенно абстрагируя программные компоненты-потребители от деталей получения данных.

Благодаря такому подходу моделе-управляемый код прикладной части системы полностью изолирован от технических деталей организации хранилищ, готов к изменению структуры модели в широком диапазоне (код автоматически реагирует на появление новых типов сущностей, изменение состава атрибутов, обновление НСИ, как мы это любим), может использовать результаты логического вывода, которые выдают незаметным для него образом правила логического вывода, построенные в визуальном конструкторе (и не только ;) ).
И все это, благодаря шардированию MongoDB, отлично масштабируется для покрытия любых обозримых потребностей.

p.s. А еще в марте мы переехали в новый красивый офис :)


?

Log in

No account? Create an account