17

我想使用一个使用 php 的图形数据库。你能指出一些关于从哪里开始的资源吗?那里有任何示例代码/教程吗?或者是否有任何其他方法可以在完全随机/抽象的情况下存储彼此相关的数据?

-

所需关系的非常抽象的例子:约翰与玛丽有关,都与学校有关,约翰很高,玛丽很矮,约翰有蓝眼睛,玛丽有绿眼睛,我想要的查询是哪些人与“矮个子有绿眼睛去学校'->回答约翰

-

另一个例子:

    TrackA -> ArtistA
           -> ArtistB

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

           -> TrackA:Remix
           -> Genre:House

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

示例查询:

TrackB 更接近哪个流派?答案:House——因为它与Album C有关,它与TrackA有关,与Genre:House有关

获取 Label A 的所有 Genre:House 相关专辑:结果:AlbumA, AlbumB - 因为它们都有与 Genre:House 相关的 TrackA

-

在 MySQL 中是可能的,但它需要为每个项目设置一组固定的属性/列和一个复杂的非灵活查询,相反,我需要每个属性本身都是一个项目,而不是“属于”某物,而是“与某事有关。

4

8 回答 8

9

正在进行一些工作以使Neo4j图形数据库可从 PHP 中使用,请参阅此 wiki 页面以获取更多信息!关于如何将您的域建模为图形,用户邮件列表往往非常棒。

更新:现在有一篇关于 PHP neo4j REST 客户端的简短入门博客文章

于 2010-05-16T10:24:16.773 回答
1

对我来说听起来有点像“典型的” Prolog问题……这是一种与 PHP 完全不同的编程语言。但也许你可以使用 popen。

或者你定义一个带有列 [id, predicate, atom1, atom2] 的 SQL 表来存储“Mary has Green Eyes”的真实性:predicate = "has", atom1 = "Mary", atom2 = "Green Eyes"。

现在您可以使用您选择的 SQL 连接和过滤谓词和属性。

于 2010-05-16T09:53:12.530 回答
1

它看起来像一个语义网络问题。因此,您必须弄清楚如何将 PHP 和语义网结合使用。也许这个链接http://bnode.org/blog/2009/05/25/back-from-new-york-semantic-web-for-php-developers-trip可以提供帮助?

于 2010-05-17T04:27:41.483 回答
1

听起来你应该这样处理它:

1) 编写一个图形对象,让您以您想要的方式查询数据。

2)为你的对象写一个持久层

3) 优化在图形对象中执行查询的调用,以便在适当的时候使用数据库调用(例如,如果您需要节省内存)。

于 2010-05-17T19:22:38.763 回答
1

我的建议是选择一个基于 Java 的图形数据库,如 OrientDB 或 neo4j,然后通过PHP/Java bridge使用它。在不久的将来,neo4j(以及在某些时候 OrientDB 也是如此)应该获得原生 php 支持,并且您可以用原生访问替换桥接器。

于 2010-12-07T15:34:02.273 回答
1

考虑到这个问题已经一年了,可能仍然有趣的是,您可以对每个支持 sparql 或类似语言的 rdf 数据存储进行这样的查询。

于 2011-06-09T15:50:00.473 回答
0

也可以看看这篇关于 OrientDB 和 PHP 使用的文章:http ://www.odino.org/346/orientdb-the-graph-db-for-the-web

于 2011-05-24T23:57:26.737 回答
0

您还可以找到 php 的 Rexster 客户端:https ://github.com/PommeVerte/rexpro-php

作为额外的信息。Rexster 可以从其他各种图形数据库(例如 Neo4j 和 OrientDb 等)加载图形。

于 2013-08-05T12:39:31.247 回答