最佳过滤解决方案

时间:2019-02-14 07:59:09

标签: performance graph-databases

我是graphDB的新手,正在研究创建一个好的数据模型。

我必须管理1000万个“联系人”,我想按“性别”过滤它们。我创建了一个POC,但一切都很好,但是我不理解/发现最好的解决方案是将性别另存为顶点:

gender as vertex

或作为联系人顶点上的字段:

gender as field

我知道每个边缘都会影响数据大小,但是我找不到关于这两种数据管理的性能差异的参考。

您知道正确的方法吗?

1 个答案:

答案 0 :(得分:0)

在此用例中,我将性别作为顶点上的属性,并在该属性上添加索引以获取答案。从理论的角度来看,将性别作为单独的顶点是更正确的做法,但它存在一些实际问题,因此我建议采用第二种方法。

  1. 您建议的第一个模型会将超节点引入图形。超节点是入射边缘数量过多的节点。性别顶点的选择性较低(男性/女性/未知),因此每个顶点都有一个branching factor,以百万计。此级别的分支因子可能会导致各种性能问题,从而导致查询缓慢。对顶点进行性别非正规化并添加索引应解决大多数这些问题。唯一可能存在的问题是返回您可能会收到的3-5百万条记录所需的时间。
  2. 在第一种方法中,回答“一个人的性别是什么?”的问题需要从 contact 顶点移到边缘到 gender 顶点,这比拉回 contact 顶点要慢。假设这是您要回答的常见查询,而不是您应该考虑的考虑因素。