Графо-структурированные базы данных и Php - PullRequest
17 голосов
/ 16 мая 2010

Я хочу использовать базу данных графа, используя php. Можете ли вы указать некоторые ресурсы о том, с чего начать? Есть ли пример кода / учебник там? Или есть какие-то другие способы хранения данных, которые связаны друг с другом в совершенно случайных / абстрактных ситуациях?

-

Очень абстрактный пример необходимых отношений: Джон относится к Мэри, оба относятся к школе, Джон высокий, Мэри короткий, Джон синие глаза, Мэри зеленые глаза, вопрос, который я хочу, это какие люди имеют отношение к короткому люди, которые имеют зеленые глаза и ходят в школу »-> ответить Джон

-

Другой пример:

    TrackA -> ArtistA
           -> ArtistB

           -> AlbumA -----> [ label ]
           -> AlbumB -----> [   A   ]

           -> TrackA:Remix
           -> Genre:House

           -> [ Album ] -----> [ label ]
   TrackB  -> [   C   ]        [   B   ]

Примеры запросов:

К какому жанру TrackB ближе? ответ: House - потому что он связан с альбомом C, который связан с TrackA и связан с жанром: House

Получить все жанры: связанные с House альбомы Label A: результат: AlbumA, AlbumB - потому что у них обоих есть TrackA, который связан с жанром: House

-

Это возможно в MySQL, но для этого потребуется фиксированный набор атрибутов / столбцов для каждого элемента и сложный негибкий запрос, вместо этого мне нужно, чтобы каждый атрибут был элементом сам по себе и вместо «принадлежности» к чему-либо, быть «связанным» с чем-то.

Ответы [ 8 ]

9 голосов
/ 16 мая 2010

Идет работа по созданию базы данных графов Neo4j из PHP, см. эту вики-страницу для получения дополнительной информации! Что касается моделирования вашего домена в виде графика, список рассылки для пользователей выглядит довольно круто.

Обновление: теперь есть короткая запись в блоге для REST-клиента PHP neo4j.

1 голос
/ 09 июня 2011

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

1 голос
/ 07 декабря 2010

Я предлагаю выбрать графическую БД на основе Java, например, OrientDB или neo4j, и затем использовать ее через PHP / Java bridge . В ближайшем будущем neo4j (и в какой-то момент также OrientDB) должен получить собственную поддержку php, и вы можете заменить мост на собственный доступ.

1 голос
/ 17 мая 2010

Звучит так, будто вы должны подходить к этому так:

1) Код графического объекта, который позволит вам запрашивать ваши данные так, как вы хотите.

2) Напишите постоянный слой для вашего объекта

3) оптимизировать вызовы, которые выполняют ваш запрос в графическом объекте, для использования вызовов базы данных, когда это необходимо (например, если вам нужно сохранить память).

1 голос
/ 17 мая 2010

Это похоже на проблему семантической паутины. Таким образом, вы должны выяснить, как вы можете использовать PHP и семантическую сеть вместе. Может быть, эта ссылка http://bnode.org/blog/2009/05/25/back-from-new-york-semantic-web-for-php-developers-trip может помочь?

1 голос
/ 16 мая 2010

Для меня это немного похоже на "типичную" Prolog проблему ... которая совсем не похожа на язык программирования, чем PHP. Но, возможно, вы могли бы работать с popen.

Или вы определяете таблицу SQL со столбцами [id, предикат, atom1, atom2], чтобы хранить правдивость «Мэри имеет зеленые глаза»: ».

Теперь вы можете объединять и фильтровать предикаты и атрибуты с помощью SQL по вашему выбору.

0 голосов
/ 05 августа 2013

Вы также можете найти клиента Rexster для php: https://github.com/PommeVerte/rexpro-php

В качестве дополнительной информации. Rexster может загружать графики из различных других графических баз данных, таких как Neo4j и OrientDb среди других.

0 голосов
/ 25 мая 2011

Ознакомьтесь также с этой статьей об использовании OrientDB с PHP: http://www.odino.org/346/orientdb-the-graph-db-for-the-web

...