HyperGraphDB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:16, 1 марта 2019.
HyperGraphDB
HGDB logo.jpg
Создатели:

Борислав Иорданов,

Константин Вандеев, Сиприан Коста , Михаил Маринов, Мируло Саравиа де Куэрос, Ян Холсман, Алаин Пикард, IИнгвар Богдан
Разработчики: Kobrix Software, Inc.
Выпущена: 2010
Постоянный выпуск: 1.3 / 4 ноября 2012 года
Написана на: Java
Операционная система: Linux, Mac OS X, Windows
Платформа: x86-64
Локализация: Английский
Тип ПО: База данных
Лицензия: GNU LGPL
Веб-сайт hypergraphdb.org

HyperGraphDB - это расширяемая портативная, распределенная, встраиваемая база данных со свободным (open-source) механизмом хранения данных. Эта система разработана специально для проектов, использующих возможности искусственного интеллекта и семантического вэба. Может использоваться как встраиваемая объектно ориентированная база данных для проектов любого масштаба.

Обзор

В данном разделе будут рассмотрены основные особенности, возможности и сценарии использования HyperGraphDB. В HyperGraphDB базовая единица представляется как атом. Каждый атом имеет ассоциированный набор атомов, называемый его целевым множеством. Размер целевого набора называется Arity. Атомы arity 0 называются узлами, атомы arity > 0 называются связями. Набор инцидентов атома x является множеством атомов, которые имеют х в качестве члена своего целевого набора. Использование наборов вместо наборов для целевого набора атома не является единственным возможным выбором; оба могут быть поддержаны, но акцент идет на первом, как наиболее практичным на сегодняшний день. Более того, каждый атом имеет связанное строго типизированное значение. Значения, произвольные типы и сами типы - это атомы. Атомы и значения представляют два ортогональных аспекта информационного содержимого, хранящегося в экземпляре HyperGraphDB. Атомы - это семантические объекты, которые образуют структуру графа, а в значения вводятся данные, которые могут быть структурированы или нет. Значение атома может быть изменено или заменяется значением другого типа, сохраняя при этом идентичную связь. Далее рассмотрены особенности HyperGraphDB:

  • Для работы необходима Java 5+
  • Есть реализации как для Windows, так и для unix и mac платформ
  • API только для Java
  • Написан на Java
  • P2P репликация и P2P фреймворк для распределенных вычислений и данных, а так же репликации данных
  • Способ запросов - Java или P2P
  • Согласованность основана на механизме STM
  • Хранилище основано на графах

Возможности HyperGraphDB

HyperGraphDB, являясь NoSQL базой данных, обладает рядом возможностей в своей реализации:

  • Обходы графа и реляционные запросы
  • Настраиваемая индексация
  • Настраиваемое управление хранилищем
  • Расширяемая динамическая схема БД через пользовательский ввод
  • База Данных Java OO "из коробки"
  • Параллельная запись и чтение
  • P2P для распределения данных
  • Элемент маркированного списка
  • Элемент маркированного списка

Сценарии использования

Далее описаны популярные сценарии использования HyperGraphDB. За счет своих ключевых особенностей, данная база данных имеет ряд различных применений в различных сферах IT:

  • В серверном Java-приложении, стандартные настройки основаны на RDBM вместе с набором бизнес-компонентов и уровнями представления.Имеется инструмент сопоставления O / R, такой как Hibernate, для прозрачного преобразования вашей структуры объекта в / из таблиц базы данных.. В последнее время наблюдается заметная тенденция замены RDBM, особенно для небольших приложений cj встроенными базами данных в памяти, с менее сложными, но, как правило, гораздо более быстрыми запросами.
  • Проекты биоинформатики образуют категорию довольно сложного программного обеспечения, которое не только может извлечь выгоду из части управления данными, как HyperGraphDB, но и является очень естественным подходом для нее. Зачастую таким проектам необходимо управлять очень сложной описательной информацией, а также большими наборами экспериментальных данных. Кроме того, сложные алгоритмы работают как с экспериментальными, так и с онтологическими данными, чтобы вывести сети взаимодействия на разных уровнях биологической организации. HyperGraphDB предназначен для облегчения всех этих действий.
  • Семантические веб-проекты являются очевидной областью применения HyperGraphDB. Так называемые «концептуальные графики» или графики RDF и даже более продвинутые методы моделирования, использующие отношения более высокого порядка, имеют прямое и естественное выражение в рамках HyperGraphDB.
  • Исследования сетей могут извлечь выгоду из возможностей HyperGraphDB для хранения очень больших распределенных графиков и разработки шаблонов, а на них работают алгоритмы с интенсивным вычислением.[Источник 1]

Основные функции

В данном разделе показано создание HyperGraphDB, хранение в ней информации и обход графов.

Создание БД

HyperGraphDB управляет хранилищем как набор файлов в каталоге. Чтобы создать новую базу данных, необходимо указать каталог, в котором будут храниться данные, и написать код Java, который создает и инициализирует экземпляр базы данных в этом каталоге. Вот пример:

import org.hypergraphdb.*; // top-level API classes are in this package

public class HGDBCreateSample
{ 
    public static void main(String [] args)
    {
        String databaseLocation = args[0];
        HyperGraph graph; 
         // ...
        try
    {
            graph = new HyperGraph(databaseLocation);
        }
        catch (Throwable t)
        {
            t.printStackTrace();
        }
        finally
        {
            graph.close();
        }
    }
}

Как можно заметить, создание базы данных сводится к созданию нового экземпляра HyperGraph. Если база данных не существует, она будет создана. Если существует, то она будет открыта. Таким образом, тот же код используется для создания или открытия базы данных. Поскольку открытая база данных хранит ресурсы операционных систем, целесообразно убедиться, что она закрыта в блоке finally. Также, очень важно правильно закрыть базу данных, чтобы избежать потери или повреждения данных базового низкоуровневого хранилища. HyperGraphDB может генерировать исключения, но очень немногие из методов API генерируют проверенные исключения.

Параметры конфигурации задаются путем создания экземпляра класса HGConfiguration.class и передачи его в качестве дополнительного параметра в метод HGEnvironment.get:

HGConfiguration config = new HGConfiguration();
config.setTransactional(false);
config.setSkipOpenedEvent(true);
HyperGraph graph = HGEnvironment.get(location, config);

Хранение информации

Хранение методом добавления любых объектов к HyperGraph Можно разместить любой объект который имеется в базе данных HyperGraphDB:

 HyperGraph graph = HGEnvironment("c:/temp/test_hgdb");
  String x = "Hello World";
  Book mybook = new Book("Critique of Pure Reason", "E. Kant");
  graph.add(x);
  HGHandle bookHandle = graph.add(mybook);
  graph.add(new double [] {0.9, 0.1, 4.3434});

Обходы графов

Одним из основных преимуществ HyperGraphDB как базы данных, является его способность хранить и управлять очень большими графиками отношений. Он смешивает регулярную реляционную и объектно-ориентированную базы данных стиля, что делает HyperGraphDB мощным инструментом для управления информацией и представления знаний. Рассмотрим основные API-интерфейсы для обхода HyperGraph. Все интерфейсы и классы находятся в пакете org.hypergraphdb.algorithms. В основе всех алгоритмов, связанных с графом, лежит основная операция перехода от узла к узлу. Это представлено интерфейсом HGTraversal. Трассировка графика всегда выполняется в определенном порядке, в зависимости от конкретного алгоритма перемещения. Алгоритм перемещения просто производит атомы в последовательности, а интерфейс HGTraversal является специализацией стандартного интерфейса java.util.Iterator. Два стандартных алгоритма обхода графика реализуются с помощью HGBreadthFirstTraversal и HGDepthFirstTraversal соответственно. Прилегающие атомы, которые необходимо посетить, вычисляются реализацией интерфейса HGALGenerator. И реализация ширины, и первый шаг вперед в первом случае принимает экземпляр HGALGenerator как аргумент конструктора. Простейшим генератором является реализация SimpleALGenerator. В этой реализации будут перечислены все смежные атомы, не учитывающие типы и значения атомов:

HGHandle myBook = ...// get the handle of a book of interest.

HGDepthFirstTraversal traversal = 
    new HGDepthFirstTraversal(myBook, new SimpleALGenerator(graph));

while (traversal.hasNext())
{
    Pair<HGHandle, HGHandle> current = traversal.next();
    HGLink l = (HGLink)graph.get(current.getFirst());
    Object atom = graph.get(current.getSecond());
    System.out.println("Visiting atom " + atom + 
                       " pointed to by " + l);
}

Стоит обратить внимание на то, что следующий метод интерфейса HGTraversal возвращает пару объектов. Первый элемент этой пары - это связь, а второй - сам атом. Более интересным HGALGenerator является интерфейс DefaultALGenerator. Полная подпись конструктора выглядит так:

DefaultALGenerator(HyperGraph graph, 
                   HGAtomPredicate linkPredicate, 
                   HGAtomPredicate siblingPredicate, 
                   boolean returnPreceeding, 
                   boolean returnSucceeding, 
                   boolean reverseOrder)

DefaultALGenerator может быть сконфигурирован с предикатом, который ограничивает ссылки, которые должны быть выбраны во время обхода, и предикат, который фильтрует проходящие атомы. Кроме того, можно также указать порядок, в котором посещаются атомы, связанные по данной ссылке. В классических графах, где все звенья имеют arity 2, порядок равен заданию направленности интересующих ссылок. В гиперграфе, где ссылки могут потенциально связывать десятки атомов, порядок может быть важен. Все зависит от представления вашего домена. Предположим, что текущий атом во время обхода равен x и что x является целью некоторой ссылки, которая выглядит так:

  L = [a, b, c, x, d, e]

Генератор AL сначала проверит, удовлетворяет ли ссылка L каналу linkPredicate. Тогда, если returnPreceeding возвращает true, он будет рассматривать каждый из атомов a, b и c как потенциальных братьев и сестер, и, он вернет все те, которые удовлетворяют siblingPredicate. Аналогично, если returnSucceeding истинно, он будет исследовать и, возможно, вернет атомы d и e. Когда reverseOrder истинно, генератор AL рассматривает ссылку L так, как если бы она имела следующий вид:

 L = [e, d, x, c, b, a]

Этот обратный порядок влияет на то, какие братья и сестры сначала возвращаются. Представьте себе граф, в котором у вас есть всевозможные публикации (книги, статьи, блоги) как узлы, и у вас есть ссылки типа CitedBy (X, Y), что означает, что публикация X содержит цитату из публикации Y. Чтобы пройти все цитаты статей, опубликованных в журнале Science, вы могли бы выполнить следующее:[Источник 2]

  DefaultALGenerator algen = new DefaultALGenerator(graph, 
                                                     hg.type(CitedBy.class),
                                                     hg.and(hg.type(ScientificArticle.class),
                                                            hg.eq("publication", "Science")),
                                                     true,
                                                     false,
                                                     false);
   HGTraversal traversal = new HGBreadthFirstTraversal(startingArticle, algen);
   ScientificArticle currentArticle = startingArticle;
   while (traversal.hasNext())
   {
       Pair<HGHandle, HGHandle> next = traversal.next();
       ScientificArticle nextArticle = graph.get(next.getSecond());
       System.out.println("Article " + current + " quotes " + nextArticle);
       currentArticle = nextArticle;
   }

Итог

HyperGraphDB - это универсальная модель памяти с указателями, типами, значениями и соединенными структурами. Или просто NoSQL framework.Текущая реализация полностью построена на основе Java. Возможность автоматического преобразования типов данных Java в типы HyperGraphDB позволяют использовать HyperGraphDB как объектно-ориентированную базу данных для большинства бизнес приложений. С++ реализация неоднократно обдумывалась, но не была начата из-за нехватки разработчиков.

Источники

  1. Сайт HyperGraphDB //Официальный сайт HyperGraphDB . Дата обновления: 27.01.2019 [2019-2019]. URL: http://http://www.hypergraphdb.org (дата обращения: 27.01.2019)
  2. Документация HyperGraphDB //Официальный сайт HyperGraphDB . Дата обновления: 27.01.2019 [2019-2019]. URL: http://www.hypergraphdb.org/?project=hypergraphdb&page=FirstSteps (дата обращения: 27.01.2019)