如何从图数据库中的几个顶点处理大量边缘

时间:2019-05-31 01:14:22

标签: neo4j graph-databases gremlin

我正在尝试基于大型RDBMS数据对图形数据库建模。 graph db背后的原因是要回答很多基于关系的问题,使不同节点之间的遍历和性能得以实现。在对此建模时,我注意到很少有节点具有大量的出站边缘。

例如,将“类别”视为一个顶点,将“产品”视为另一个顶点。还有其他类似“产品”的顶点存在。但是,很多边缘都来自“类别”到其他边缘。边缘的输出数量在100,000个中。

这是警报吗? 有没有更好的设计原则以不同的方式主动进行设计?

2 个答案:

答案 0 :(得分:0)

让我们假设您当前的数据模型看起来像这样:

(:Category {name: 'Toy'})<-[:IS_A]-(:Product {id: 123})

某些具有Category label的节点具有大量相关的Product

要减少关系的数量并稍微简化查询,您可以考虑消除Category节点,而是向每个Product节点添加一个额外的label。例如:

(:Product:Toy {id: 123})

使用这种新的数据模型,您可以直接查找所有Toy产品,而无需遍历任何关系(例如MATCH (t:Toy) RETURN t)。

答案 1 :(得分:0)

另一种选择是将“类别”用作“产品”的属性,这既可以解决超顶点问题,又可以节省资源。例如,如果要查找特定类别下的所有产品,请为“类别”属性创建索引。

通常,在图形建模中应避免使用超级顶点,因为它们会对查询性能产生重大影响。如果查询这些边缘,大多数图形数据库将被截断或进行采样。如果不可避免,遍历这些顶点的向外边缘时,请确保至少设置限制。