2010-05-16 108 views
16

我想使用使用php的图形数据库。你能指出一些资源开始的地方吗?那里有没有任何示例代码/教程?或者在完全随机/抽象的情况下还有其他存储数据的方法吗?图形结构化数据库和Php

-

需要的关系很抽象的例子:约翰涉及到玛丽,既涉及到学校,约翰身材高大,玛丽是短暂的,约翰蓝眼睛,玛丽有绿色的眼睛,询问我要的是哪个人们都与“短的人有绿色的眼睛,上学去” - >答案约翰

-

又如:

TrackA -> ArtistA 
      -> ArtistB 

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

      -> TrackA:Remix 
      -> Genre:House 

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

考试ple查询:

哪种流派更接近TrackB?回答:House - 因为它与专辑C有关,专辑C与TrackA有关,并与流派有关,并且与流派有关:House

获取所有类型:House A的相关专辑A:结果:AlbumA,AlbumB - 因为它们都有TrackA以体裁相关:房子

-

有可能在MySQL,但它需要一个固定的一组为每个项目和复杂的非灵活的查询属性/列的,而不是我需要每一个属性是一个项目本身,而不是'属于'的东西,是'相关'的东西。

+1

“属于某物和”与某事有关“(除了使用不同的单词)之间的区别是什么? – 2010-05-16 10:48:50

+0

@Joel L:通过归属我的意思是像一个项目具有的属性,并且相关的是项目如何相关除了一个是另一个的属性之外,Like Tracks属于Artist,但同一个Track可以有多个Artist。使用父/子方法,您需要将同一个孩子(音轨)复制到每个父母(艺术家)加上一首曲目可以在多个唱片集和多个标签中,你如何描述这样的关系而不使用图形? – stagas 2010-05-16 10:57:28

回答

1

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

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

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

+0

我认为你需要一排关于每一种关系的行,这可能是相当多的行,如果你处理大量的数据,如音乐或电影数据库与标签和作者,艺术家,流派和更多的关系? – stagas 2010-05-16 10:00:36

+0

是的,但几乎每个图的节点(“原子”)之间往往具有指数数量的边(“关系”),这使得使用传统数据库更难以解决图问题(尤其是在使用水平分区的情况下)。 – 2012-11-23 11:07:10

1

它种听起来像你应这样理解:

1)代码的图形对象,可以让你查询你的数据,你想要的方式。

2)写出你的对象

3)持久层的优化是做您的查询的图中的对象使用的数据库调用调用适当的时候(例如,如果你需要节省内存)。

+0

是的,这可能是一个解决方案,我想如果有任何类已经在那里,但似乎图结构目前很少关注,你可以发现很少。我想我将不得不发明轮子... – stagas 2010-05-17 19:39:14

1

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

1

也考虑到这个问题,是一岁,它仍然可能是有趣的是,你可以做这样的查询与每个支持sparql或类似语言的rdf数据存储。

0

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

由于额外的信息。 Rexster可以加载来自各种其他图形数据库的图形,例如Neo4j和OrientDb等。