图形数据库建模:多边缘优于具有属性的单边缘?

Ric*_*rdo 2 database modeling graph neo4j arangodb

这适用于将映射元数据的项目.还有更多的节点,但这个特殊的节点成了团队中的争论.

哪种模型会产生最佳查询性能?或者没关系?

选项1

权限元数据显式为节点之间的边缘.

选项2

权限元数据位于边的属性内.

选项3

???

元数据的图形建模:哪一个更好?

Max*_*fer 6

让我在这里评论ArangoDB,作为其开发者之一.

还有第三种可能性,即为不同的访问方法提供单个顶点集合和多个边集合.然后,您将"正式"拥有3个共享相同顶点集的图形.

我希望这在性能上更好,因为每种访问类型只需处理单一类型的边缘,访问速度很快.

显然这一切都取决于你的疑问.我的陈述适用于诸如"一个人可以更新的所有实体是什么?"之类的查询.或"谁可以选择这个实体?".

我可以想象你的标准查询更多"这个人可以删除该实体吗?" 或"此人对该实体拥有哪些访问权限?".

对于任何建议的方法,这两个问题可能效率不高,因为据我所知,所有这些问题都需要在Person的传出边缘或实体的传入边缘进行搜索.

这里需要的是一种"顶点中心索引",它是一个可用于给定顶点的输出或输入边缘集合的索引.例如,如果你使用你的选项2(或者实际上是1,这并不重要),并且在所有边上都有一个排序索引,首先由Person排序,然后由实体排序.然后,它是一个具有时间复杂度O(log(#edges))的查找,以查找从给定Person到给定Entity的(可能是单例)边集.

我们ArangoDB目前正忙于添加此功能,该功能将出现在接下来的两个版本之一中.