图结构数据库与Php

17

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

-

非常抽象的关系示例:John与Mary有关,两人都与学校有关,John很高,Mary很矮,John有蓝眼睛,Mary有绿眼睛,我想要查询的是“与‘身高矮且眼睛为绿色且就读于学校的人’有关的人是谁”-> 答案是John。

-

另一个例子:

    TrackA -> ArtistA
           -> ArtistB

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

           -> TrackA:Remix
           -> Genre:House

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

示例查询:

TrackB更接近哪种类型?答案:House - 因为它与Album C相关,而Album C又与TrackA相关,并且与Genre: House相关

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

-

在MySQL中可以实现,但需要为每个项目固定一组属性/列和一个复杂的非灵活查询,相反,我需要每个属性都成为一个独立的项目,并且不是“属于”某物,而是“与”某物相关。


1
除了使用不同的单词之外,“属于某物”和“与某物有关”之间有什么区别? - Joel L
@Joel L:所谓“属于”,是指一个项目具有的属性,而“相关”则是指除了一个项目是另一个项目的属性之外,它们之间的关系。例如,曲目属于艺术家,但同一曲目可以有多个艺术家演唱。如果使用父/子方法,您需要将相同的子项(曲目)复制到每个父项(艺术家)中,而且一首曲目可以出现在多个专辑和多个唱片公司中。如果不使用图形,您如何描述这样的关系? - stagas
8个回答

9

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

更新:现在有一个短的入门博客文章介绍了一个PHP neo4j REST客户端。


Neo4j REST客户端查询速度比MySQL慢得多。 - conandor

1

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

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

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


我认为你需要为每种关系都创建一行,如果你处理大量数据,例如带有标签、作者、艺术家、流派等关系的音乐或电影数据库,那么可能需要创建相当多的行。 - stagas
是的,但几乎每个图形都倾向于在节点(“原子”)之间具有指数数量的边缘(“关系”),这使得使用传统数据库解决图形问题变得更加困难,特别是如果还使用了水平分区。 - mr.b

1

1

听起来你应该这样处理:

1)编写一个图形对象,让您可以按照所需的方式查询数据。

2)为您的对象编写持久层

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


可以,那可能是一个解决方案。我曾想过是否已经有相关的课程,但目前似乎图结构并没有得到很多关注,而且你能找到的代码非常少。我想我得重新发明轮子了... - stagas

1

考虑到这个问题已经一年了,可能仍然值得注意的是,您可以使用支持SPARQL或类似语言的每个RDF数据存储库执行此类查询。


1

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


0

0

你也可以在这里找到一个适用于php的Rexster客户端:https://github.com/PommeVerte/rexpro-php

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接