Подтвердить что ты не робот

Графические базы данных и триплестры RDF: хранение данных графа в python

Мне нужно разработать базу данных графа в python (мне понравилось бы, если кто-нибудь может присоединиться ко мне в разработке. У меня уже есть немного кода, но я бы с удовольствием обсудил об этом).

Я проводил свои исследования в Интернете. в Java, neo4j является кандидатом, но я не смог найти ничего о фактическом дисковой памяти. В python существует много графических моделей данных (см. Это пред-PEP-предложение, но ни одна из них не удовлетворяет моей потребности хранить и извлекать с диска.

Однако я знаю о трипестрерах. triplestores - это в основном базы данных RDF, поэтому модель данных графа может быть отображена в RDF и сохранена, но я вообще неспокойна (в основном из-за отсутствия опыта) об этом решении. Одним из примеров является Sesame. Факт в том, что в любом случае вам нужно преобразовать из представления графика в памяти в представление RDF и наоборот, если код клиента не хочет взломать документ RDF напрямую, что в большинстве случаев маловероятно. Это было бы похоже на обращение к кортегам DB напрямую, а не к созданию объекта.

Что представляет собой современное состояние хранения и извлечения (a la DBMS) данных графа в python, на данный момент? Было бы целесообразно начать разработку реализации, надеюсь, с помощью кого-то, кто интересуется этим, и в сотрудничестве с разработчиками Graph PEP? Пожалуйста, обратите внимание, что это будет частью моей работы в течение следующих месяцев, поэтому мой вклад в этот возможный проект довольно серьезен;)

Изменить: найдено также directededge, но, похоже, это коммерческий продукт

4b9b3361

Ответ 1

Я использовал Jena, который является базой Java, и Allegrograph (Lisp, Java, привязки Python). У Йены есть сестринские проекты для хранения данных на графике и длится долгое время. Allegrograph неплох и имеет бесплатную версию, я думаю, что я бы предложил эту причину, которую легко установить, бесплатно, быстро, и вы можете быстро и быстро отправиться в путь. Сила, которую вы могли бы получить от обучения небольшому RDF и SPARQL, может быть очень полезной. Если вы уже знаете SQL, то вы отлично начинаете. Возможность запросить ваш график с использованием SPARQL принесет вам некоторые большие преимущества. Сериализация в три раза по RDF была бы простой, и некоторые форматы файлов были бы очень легкими (например, NT). Я приведу пример. Допустим, у вас есть следующий график node -edge- node ids:

1 <- 2 -> 3
3 <- 4 -> 5

это уже субъектная предикатная форма объекта, поэтому просто нанесите на нее некоторую нотацию URI, загрузите ее в тройной магазин и запросите по-волю через SPARQL. Здесь он находится в формате NT:

<http://mycompany.com#1> <http://mycompany.com#2> <http://mycompany.com#3> .
<http://mycompany.com#3> <http://mycompany.com#4> <http://mycompany.com#5> .

Теперь запросите для всех узлов два перелета из node 1:

SELECT ?node
WHERE {
    <http://mycompany.com#1> ?p1 ?o1 .
    ?o1 ?p2 ?node .
}

Это, конечно, даст < http://mycompany.com#5 > .

Другим кандидатом будет Mulgara, написанный на чистой Java. Поскольку вы, похоже, больше заинтересованы в Python, хотя я думаю, что сначала вы должны взглянуть на Allegrograph.

Ответ 2

Я думаю, что решение действительно зависит от того, что именно вы хотите сделать с графиком, как только вам удалось сохранить его на диске/в базе данных, и это немного неясно в вашем вопросе. Однако несколько вещей, которые вы, возможно, пожелаете рассмотреть, следующие:

  • если вы просто хотите сохранить график без использования каких-либо функций или свойств, которые могут возникнуть в решении rdbms (например, ACID), то как насчет просто травления объектов в плоский файл? Очень рудиментарно, но, как я уже сказал, зависит от того, чего вы хотите достичь.
  • ZODB - это объектная база данных для Python (отключение от проекта Zope, который я думаю). Я не могу сказать, что у меня был большой опыт работы в среде с высокой производительностью, но несколько ограничений позволяют вам хранить объекты Python изначально.
  • Если вы хотите продолжить RDF, существует проект RDF Alchemy, который может помочь облегчить некоторые из ваших проблем относительно преобразования с вашего графика для структур RDF, и я думаю, что Sesame как часть этого стека.

Есть некоторые другие инструменты персистентности, подробно описанные на сайте python, которые могут представлять интерес, однако я потратил довольно много времени на изучение этой области в прошлом году, и в конечном итоге я обнаружил, что не существует собственного решения Python, которое отвечало моим требованиям.

Самый успешный у меня был использование MySQL с пользовательской ORM, и я отправил пару релевантных ссылок в ответ на этот вопрос. Кроме того, если вы хотите внести свой вклад в проект RDBMS, когда я поговорил с кем-то из Open Query о механизме хранения графиков для MySQL, они казались заинтересованными в процессе активного участия в их проекте.

Извините, я не могу дать более окончательный ответ, но я не думаю, что есть один... Если вы начнете разрабатывать свою собственную реализацию, мне было бы интересно следить за тем, как вы продолжай.

Ответ 4

Хм, может, вам стоит взглянуть на CubicWeb

Ответ 6

Redland (http://librdf.org), вероятно, является решением, которое вы ищете. Он также имеет привязки Python.