我正在尝试基于大型RDBMS数据对图形数据库建模。 graph db背后的原因是要回答很多基于关系的问题,使不同节点之间的遍历和性能得以实现。在对此建模时,我注意到很少有节点具有大量的出站边缘。
例如,将“类别”视为一个顶点,将“产品”视为另一个顶点。还有其他类似“产品”的顶点存在。但是,很多边缘都来自“类别”到其他边缘。边缘的输出数量在100,000个中。
这是警报吗? 有没有更好的设计原则以不同的方式主动进行设计?
答案 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)
另一种选择是将“类别”用作“产品”的属性,这既可以解决超顶点问题,又可以节省资源。例如,如果要查找特定类别下的所有产品,请为“类别”属性创建索引。
通常,在图形建模中应避免使用超级顶点,因为它们会对查询性能产生重大影响。如果查询这些边缘,大多数图形数据库将被截断或进行采样。如果不可避免,遍历这些顶点的向外边缘时,请确保至少设置限制。