图形结构数据库和Php

时间:2010-05-16 09:37:01

标签: php database database-design nosql graph-databases

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

-

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

-

另一个例子:

    TrackA -> ArtistA
           -> ArtistB

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

           -> TrackA:Remix
           -> Genre:House

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

示例查询:

哪种类型的TrackB更接近?回答:众议院 - 因为它与专辑C有关,专辑C与TrackA有关并与流派有关:House

获取所有类型:标签A的房屋相关专辑:结果:AlbumA,AlbumB - 因为他们都有TrackA与流派有关:House

-

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

8 个答案:

答案 0 :(得分:9)

有一些工作可以使PHP提供Neo4j图形数据库,有关详细信息,请参阅this wiki page!关于如何将您的域建模为图表,user mailing list往往非常棒。

更新:PHP neo4j REST客户端现在有一个简短的getting started blog post

答案 1 :(得分:1)

听起来有点像“典型”Prolog问题......这是一种与PHP完全不同的编程语言。但也许你可以和popen一起工作。

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

现在,您可以使用您选择的SQL加入和过滤谓词和属性。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

听起来你应该采用这种方式:

1)对图形对象进行编码,使您可以按照自己的方式查询数据。

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

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

答案 4 :(得分:1)

我的建议是选择一个基于Java的图形数据库,如OrientDB或neo4j,然后通过PHP/Java bridge使用它。在不久的将来neo4j(以及在某些方面也是OrientDB)应该获得本机php支持,你可以用本机访问替换桥。

答案 5 :(得分:1)

考虑到这个问题是一年之久,可能仍然有趣的是,您可以对每个支持sparql或类似语言的rdf数据存储区执行此类查询。

答案 6 :(得分:0)

另请参阅本文,了解OrientDB与PHP的用法:http://www.odino.org/346/orientdb-the-graph-db-for-the-web

答案 7 :(得分:0)

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

作为额外信息。 Rexster可以加载来自各种其他图形dbs的图形,例如Neo4j和OrientDb等。