2012-08-27 66 views
1

我需要一个设计建议来实现数组的索引或关系。我使用最新的Spring数据的Neo4j及其实施 我有有类别,如下面的场节点,Neo4j的设计建议:数组的索引或关系

@NodeEntity 
Class Product { 

     Set<Category> Categories; 

} 
public enum Category { 
RTW, 
SHOE, 
DENIM, 
OUTER_WEAR 
} 

现在,我需要找出哪些有X和Y类别(EX产品:RTW和SHOE)。 达成此目的的最佳方法是什么? 我可以在数组类型上创建索引吗?或者是否应为类别创建新的NodeEntity并在产品和类别之间创建必要的关系?

任何帮助,这将不胜感激。提前致谢。

回答

3

您应该使用关系,因为它是图形数据库的本质。

[ProductA(Node)] ---[HAS_CATEGORY(Relation)]---> [Category1 (Node)] <--[HAS_CATEGORY(Relation)]---- [ProductB (Node)] 

试想一下,你要显示的产品在每个类别数量的基础上,最畅销的产品,用户recommandations等最流行的类别......这很容易计算与横向查询。你应该使用索引来优化,而不是相关。

看看小鬼的视频演示,这是真的很强大:http://www.youtube.com/watch?v=5wpTtEBK4-E

春数据支持Cypher和小鬼查询语言。

在这里看到有关建模类别的图形数据库更多的信息:http://blog.neo4j.org/2010/03/modeling-categories-in-graph-database.html

+0

感谢您的及时回复灵光。它为我提供了设计所需的良好信息。我将通过提供的链接了解更多信息。 –

+1

使用“超节点”时要小心,即它们之间具有太多关系的节点。它减慢了整个分贝。 当与两百亿个节点一起工作时,最好在名称(RTW,SHOE ...)和它的值的特定节点上创建一个属性,而不是索引这个属性,而不是有一个SHOE节点和两个关系。 – ulkas