【问题标题】:Design suggestion for Neo4j: Index or relation for ArrayNeo4j 的设计建议:Array 的索引或关系
【发布时间】:2012-08-27 11:44:49
【问题描述】:

我需要为数组实现索引或关系的设计建议。我正在使用最新的 Spring Data Neo4j 来实现它 我有一个节点,其中包含如下类别的字段,

@NodeEntity
Class Product {

      Set<Category> Categories;

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

现在,我需要找出具有 X 和 Y 类别的产品(例如:RTW 和 SHOE)。 实现这一目标的最佳方法是什么? 我可以在数组类型上创建索引吗?还是我应该为 Category 创建一个新的 NodeEntity 并在 Product 和 Category 之间创建必要的关系?

对此的任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: neo4j spring-data-neo4j


    【解决方案1】:

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

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

    假设您想显示每个类别中的产品数量、基于最畅销产品的最流行类别、用户推荐等......使用横向查询很容易计算。您应该使用索引进行优化,而不是关联。

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

    Spring Data 支持 Cypher 和 Gremlin 查询语言。

    有关图形数据库中建模类别的更多信息,请参见此处:http://blog.neo4j.org/2010/03/modeling-categories-in-graph-database.html

    【讨论】:

    • 感谢伊曼纽尔的及时回复。它为我提供了设计所需的良好信息。我将通过提供的链接了解更多信息。
    • 在使用“超级节点”时要小心,即关系太多的节点。它减慢了整个数据库的速度。在处理数十亿个节点时,最好在具有名称 (RTW,SHOE...) 及其值的特定节点上创建一个属性,而不是对该属性进行索引,而不是拥有一个具有数十亿个关系的 SHOE 节点。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    相关资源
    最近更新 更多