2012-09-10 38 views
2

我是neo4j的新手,我正在建立一个社交网络。为了这个问题,我的图由userevent节点组成,它们之间有关系。Neo4j,哪个更好:多重关系还是一个属性?

用户可能被邀请,加入,参加或主持一个事件,每个都是前一个事件的子集。

对于/应该为每个状态/状态创建多个关系还是有一个与存储当前状态的属性的关系?是否有任何好处?

+0

我认为简单的编程代码着想,你应该使用一个关系类型(如“事件”)和它的属性(如“状态:出席”)。但如果你真的必须最大限度地提高速度,请使用下面建议的关系类型 – ulkas

回答

2

根据我的理解,图形类型查询比关系类型更容易/更有效地完成关系类型。

一个关系如何,但关系类型不同?

您可以使用Cypher查询与管道的多种关系类型(如果您与事件之间不存在其他关系,则不希望在查询中找到这些关系)。

更新 - 添加控制台例如:http://console.neo4j.org/?id=woe684

或者,你可以离开旧有关系,而不是必须构建稍微复杂的查询,但感觉有点浪费这个用例。

+0

你知道这种性能差异今天是否仍然如此吗? 我有8种不同的关系,每种都有5个关卡。我还应该创建40个不同的关系类型,而不是8个具有“值”属性的关系类型? – MrE

+0

是的。在缓存和存储中,关系类型基本上就是索引的方式。如果您只有8种不同的关系,那么这并不重要,但是如果您(在给定节点上)有几千EVENT_ATTENDEE关系和100 EVENT_HOST关系(按照此示例),指定EVENT_HOST它甚至不会考虑其他关系类型。由于你有更多的关系,它会更重要。 –

1

如果可能,在属性限定的单一类型上选择不同的关系类型可能会在查询图时产生显着的积极性能影响。前一种方法比后者快至少2倍。当数据处于高级缓存中并且使用本地Java API查询图时,第一种方法对于单跳遍历速度要快8倍以上。

来源:http://graphaware.com/neo4j/2013/10/24/neo4j-qualifying-relationships.html

+0

当没有属性的关系时它是合理的,但当它包含属性时如何表现? – MAYA