我想使用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中是可能的,但是每个项目都需要一组固定的属性/列和一个复杂的非灵活查询,而我需要每个属性都是一个项目,而不是“属于”某个东西,与某事“相关”。
答案 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等。