建模实践-Neo4j

时间:2019-12-12 14:23:08

标签: neo4j modeling

我有一个图,其中包含一堆类型为“杂志”的节点。每本杂志都有一些属性和关系。我想将数据添加到图表中,以了解特定目标群体(即“男性”或“女性”)阅读杂志的程度。显然,甚至针对“女性”的杂志有时也会被“男性”阅读,因此我可以在关系中使用属性(也许是0到1之间的数字)。

我的问题是,这是否是一个好的设计实践,因为节点“男人”和“女性”将与图中的每个弹匣节点都有联系。在具有该值的杂志上,但这对于查询而言不是最佳选择。

在图上具有基本上是必不可少的关系的节点是否可以,还是仅是冗长的关系?如果是这样,哪种方法更好?

2 个答案:

答案 0 :(得分:1)

我认为这取决于您需要如何查询数据。根据我对Neo4j的经验,您要避免具有很多边缘的超级节点。但是,“很多”是非常主观的,并且可能会根据服务器的规格而有所不同。但是总的来说,在您的用例中,我认为属性会更有意义。也许如果您提供一些示例查询,我们可以比较两种选择。

答案 1 :(得分:1)

由于您恰好有两个目标组,因此这两个目标组之间的关系数将是(杂志数量/ 2)(从您的问题来看,听起来杂志仅具有一个目标组,而不是更多)。您尚未说明图表的大小-可能足够小,不会导致两个目标组密集。

无论如何,问题是,您打算如何对待目标人群和读者群?您的查询会被它们过滤还是与它们进行比较?如果不是,而这些只是您要捕获的属性,那么答案很简单,应该将它们建模为Magazine节点上的属性。

如果通过这些属性确实有大量的主要查询,则可以索引该属性。每个目标组的单独节点只有在您拥有两个以上的值时才有价值,杂志可以定位多个组,它们不仅与杂志相关而且不像@NonameCurious所指出的那样成为超节点。 >