如果我们在neo4j中创建自引用节点,这样可以吗?我需要在大数据环境中使用它,因此性能非常重要。 我找到了一个例子here,但需要了解更多有关此问题的意见。一般哪一个更好?使用自引用节点或将它们分解为具有不同标签和关系的节点? 我的方案是创建电子商务标签组和标签。 TAG_GROUP有TAG,这很清楚。但是有些标签可能有子标签。所以可以有两个解决方案:
1)要使用TAG- [has] -TAG自参考标记和{parentID,isSubTag,...}等属性,这样做的好处是我可以使用多个子标记级别。但是我不确定表现如何。
2)使用TAH- [has] -SUB_TAG。那么也许这个更简单,更容易理解。但是如果SUB_TAG本身有一个SUB_SUB标记怎么办?
任何帮助都将不胜感激。
P.S.我将使用neo4j 3.0.1独立服务器和Spring-Data-neo4j 4.1.1
答案 0 :(得分:2)
在SDN的用例之外,你所描述的是一个层次结构,它绝对可以在Neo4J中自然建模。
父母/子女的概念必须与关系完成,不需要属性。
(Tag)-[:CHILD]->(Tag)-[:CHILD]->(Tag)
我假设你的产品带有相关标签,然后标签可以tags
产品:
(Tag)-[:TAGS]->(Product)
查找产品的关联标签非常简单:
MATCH (product:Product {id: 1})
OPTIONAL MATCH (product)<-[:TAGS]-(tag)
RETURN product, collect(tags) as tag
OPTIONAL MATCH在没有破坏查询的情况下考虑了没有标签的产品
如果您希望每个标签的标签的完整层次结构标记产品
MATCH (product:Product {id: 1})
OPTIONAL MATCH (product)<-[:TAGS]-()<-[:CHILD*0..]-(tag)
RETURN product, collect(tag) as tags
这里0考虑了标签没有父母的情况,并将()
嵌入tags
集合中。
我建议您阅读以下有关建模和Cypher部分的内容,我相信有人可以为SDN方面添加答案。
http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html