Пользователь
0,0
рейтинг
27 января 2010 в 12:47

Разработка → HyperGraphDB — база данных на основе графов



Наверное, не многие знают о существовании такого типа баз данных, как базы данных на основе графов (graph db). Ранее в NOSQL среде была распространена всего одна система такого плана — Neo4j. Сегодня же к нам прибыло еще 2 — Infogrid и HyperGraphDB. О последнем и пойдет речь.

Как описывают сами создатели свою систему:

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

Согласитесь, звучит сильно. Но, нужны подробности. Отправимся за ними в прибежище всех NOSQL проектов — http://nosql-database.org и официальный сайт проекта — http://www.kobrix.com. Вот, что мы оттуда узнаём:
  • Для работы необходима Java5+
  • Есть реализации и для Windows, *nix и mac платформ
  • API только для Java (и языки на платформе Java)
  • Написан на Java
  • Способ запросов — Java или P2P
  • P2P репликация и P2P фреймворк для распределенных вычислений и данных, а так же репликации данных
  • Согласованность (concurrency) основана на механизме STM — Software Transactional Memory (механизм аналогичный транзакциям в базе данных — подробнее на en:Wikipedia)
  • Лицензия LGPL
В это базе данных как уже стало ясно из названия используются гиперграфы. Гиперграф это расширение обычной концепции графа, позволяющей ребру графа иметь более 2-х вершин. HyperGraphDB расширяет эту концепцию еще больше, позволяя ребру указывать на другое ребро, и позволяет любому ребру или вершине иметь произвольное значение в виде полезной нагрузки. Основные требования которые учитывались в разработке системы пришли из проекта OpenCog, в котором была попытка реализовать систему AGI (подход основанный на когнитивной психологии и графах концепций-перцепций-атомов, с activation spreading, иногда многоуровневой архитектуры, активное использование гетерогенных механизмов — GA/эволюц.приграммирование, байесовы сети, статистические механизмы, все сорта вывода — логического, пушистого, вероятностного и т.п.) где была необходимость в реализации самомодифицирующихся вероятностных гиперграфов.

Основная единица хранения в HyperGraphDB называется atom. Каждый atom имеет произвольное значение и может указывать любое количество других atom. Типы данных управляются единой расширяемой системой встроенной в структуру гиперграфов.

Схема хранения данных платформонезависисмая и позволяет работать с данными с помощью любого языка программирования на любой платформе. На низком уровне данные хранение данных базируется на BerkeleyDB. Ограничения размеров, практически не существует. HyperGraphDB не вносит ограничений на размер графа, но размер каждой отдельной сущности ограничен системой хранения — 2 Gb для BerkeleyDB. Однако архитектура позволяет обойти ограничения BerkeleyDB для некоторых atom, если вам это понадобится.

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

Как мы видим, ребята из kobrix.com сделали достаточно интересную систему, которая успешно вошла в ряд NOSQL систем. Ну а для тех кто заинтересовался, приведу ряд ссылок:

Страница проектаhttp://www.kobrix.com/hgdb.jsp
Исходные коды на Google Codehttp://code.google.com/p/hypergraphdb/
Примеры работы с HyperGraphDB http://www.kobrix.com/wikishow?project=hypergraphdb&page=FirstSteps

Andy One @SilenceAndy
карма
197,5
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (43)

  • +1
    А для скриптовых языков типа PHP библиотек не предвидеться?
    • +2
      Пока нет. Но думаю если появится время напишу API прокси для PHP и Python.
      • +1
        r00les@yandex.ru
      • 0
        было бы очень полезно ;)
      • 0
        Есть веть мост между Java машиной и PHP, если через него с не работать? Или очень тормозно будет?
        • 0
          Для использования в продакшене лучше не стоит, а для собственных экспериментов можно попробовать.
        • 0
          тормоз будет
    • 0
      на сколько я понял — не в ближайшем будущем.
      если бы АПИ было бы на С, то можно было бы написать расширения для РНР, Питона, Руби и даже Луа.
      см мой коммент ниже
  • +2
    > Возможность автоматического преобразования типов данных Java в типы HyperGraphDB

    это чем-то схоже с ORM, если это так, тогда штука действительно клевая, надо присмотреться
  • +8
    «Технология X успешно используется для технологий семантического веба, обобщая идеи технологий Y и Z. Хранение данных возможно под любой платформой и использует механизм распределенных объектов для успешного выполнения в облачной архитектуре. Использует технологию AGI (распределенное информационное моделирование эволюционной парадигмы развития и парапсихологических способностей) и может использоваться для реализации бизнес-приложений».

    Где конкретика? Что можно делать, что нельзя, зачем нужна, где используется?
    • –6
      учите дискретную математику
    • 0
      Что можно делать, что нельзя, зачем нужна

      Хм… Ну думаю можно хранить данные в сложных структурах, т.е. графах. Это большая проблема при больших объемах данных. Ребята из linkedin очень много времени потратили на реализацию хранения и перестроения графов, думаю наработки в HyperGraphDB им бы пригодились.
      где используется

      На данный момент используется только в одном проекте — Seco IDE, самими разработчиками.
      • 0
        покопался в Seco IDE, не понял для чего оно, из описания вроде бы как для выполнения скриптовых языков
    • +2
      по идее для всего, что использует не только графы, но и блуждания (traversing) по ним.

      на презентации(?) neo4j показывалась модель соц. сети и предлагалось найти друзей друзей, отстоящих от пользователя максимум на 4 шага. Не помню количество данных, но в MySQL операция занимала 2 секунды, в neo4j — 2 миллисекунды

      Как-то так
      • 0
        это на каком объеме пользователей?
        думаю, если пользователей соцсети перевалит за 10 млн (средненькая сеть), то это будет далеко не 2 сек!
        • 0
          neo4j заявляет работу с несколькими миллиардами нод на одной JVM

          В каком-то блоге прозвучала инфа про 2мс для 25 миллионов пользователей. Опять же емнип :)))

          К сожалению, официальных бенчмарков никто никгде так и не предоставил :) Поэтому надо ковыпять самому :(
  • +1
    а подробнее об Infogrid напишете, желательно в сравнении?
    • +2
      Да.
      • +1
        ждёмс ))
  • 0
    API только для Java (и языки на платформе Java)
    Ну можно же об этом где-то повыше написать? В заголовке, например «база данных на основе графов для Java».
    • +1
      На данный момент в форуме разработчиков уже несколько человек занимаются реализацией API для других языков, так что это пока только Java. Если я напишу для Java люди пройдут мимо и не узнают о системе, которая в скором времени будет доступна для многих языков и имеет довольно труднореализуемые возможности и абсолютно неизвестна рунете.
  • –1
    «Высокая производительность»? Все-таки решения на C и C++ побыстрее будут.
    • 0
      Да, высокая производительность. Это ведь распределенная система, и объем зависит от количества машин внутри системы. К тому же разработчики ищут людей которые помогут портировать систему на С++.
      • +1
        После портирования, очень даже возможно, но вообще производительность это не «просто добавь машин» :)
        • 0
          Полностью согласен. Тем более для таких задач код на Java будет медленнее в несколько раз, по сравнению с кодом на C.
          • +1
            Не совсем согласен, сейчас java по производительности достаточно близка к С, единственное в чем можно ее упрекнуть так это в том что она будет использовать в несколько раз больше памяти.
            • 0
              и еще вы не учли такую вещь: что эта ДБ является лишь надстройкой над BDb
              Хоть BDb, является одной из самых производительных key/value Db, но на мой взгляд высокой производительностью не пахнет.
              Я бы рискнул в хайлоад-проете ее использоать

              кстати, а что там с мосштабируемостью?
    • 0
      согласен,
      только кто минуснул-то
  • 0
    Ай, красота. Кажется я знаю что буду использовать для контрольной по экспертным системам =)
  • 0
    и воть хоть ты тресни всеравно прийдется самому проводить тесты быстродействия ((
  • 0
    concurrency — параллельность, согласованность
    • 0
      Да, думаю так лучше. Исправил. Спасибо.
      • НЛО прилетело и опубликовало эту надпись здесь
  • –1
    Выглядит круче neo4j, это приятно. Вопрос в том, насколько база готова для применения в продакшене?

    ЗЫ: Автор, исправьте, плз, NoSQL в заголовке на NOSQL
    • +3
      NoSQL общепринятая аббревиатура.
  • 0
    Красотища. Ещё бы Python API к этой БД и докрутить Django ORM.
    Ссылка на Unix версию с оф. сайта битая tgz -> tar.gz, но на googlecode всё в порядке.
    Сейчас попробуем, я очень ждал этого проекта.
  • 0
    Эта база отлично подходит для нашей задачи. У нас очень сложная структура БД с огромным количеством взаимосвязей.
    В реляционную базу ее не уложить — это точно. Одних только сущностей пара тысяч, а связей — просто ужос.
    Мы используем объектную базу DB4O. Но у нее есть недостаток — ссылочность объектов на другие объекты приводит к невозможности изменения структуры БД. А в HGDB эта проблема существует, но зато гораздо лучше решается.
    Спасибо большое за эту статью. Если бы мог еще бы кармы подкинул.
    • 0
      Всегда пожалуйста :)
    • 0
      Интригующее описание. Не собираетесь рассказывать общественности про эту систему?
      • 0
        Незачем. Это госзаказ. Абсолютно ничего интересного
  • 0
    Почему-то очень напомнило FramerD. Судя по-описанию — очень много общих концепций.
  • 0
    жаль, что ограничено только джава,
    лучше бы опубликовали АПИ, тогда может народ написал бы расширения к Руби, Питону и РНР и тогда внедрение не заставило бы себя долго ждать…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.