过滤的最佳解决方案
Best solution for filtering
我是 graphDB 的新手,我正在学习如何创建一个好的数据模型。
我必须管理 1000 万 "Contacts",我想按 "gender" 过滤它们。我创建了一个 POC,一切都很好,但我没有 understand/find 如果最好的解决方案是将性别保存为顶点:
或作为联系人顶点上的字段:
我知道每条边都会影响数据大小,但我没有找到任何关于这两种类型的数据管理的性能差异的参考资料。
你知道正确的做法吗?
在这个用例中,我会将性别作为顶点上的 属性 并在该 属性 上添加索引以获得您的答案。虽然从理论上讲,将性别作为一个单独的顶点更正确,但它有一些实际问题导致我建议第二种方法。
- 您建议的第一个模型将在您的图表中引入一个超节点。超节点是具有不成比例的大量入射边的节点。性别顶点将具有低选择性 (Male/Female/Unknown),因此每个顶点将具有数百万的 branching factor。这种级别的分支因素可能会导致各种性能问题,从而导致查询缓慢。将性别非规范化到顶点并添加索引应该可以解决大部分这些问题。可能仍然存在的唯一问题是 return 您可能会收到的 3-5 百万条记录所花费的时间。
- 在回答 "What is a person's gender?" 问题的第一种方法中,需要从 contact 顶点遍历到 gender[=20 的边=] 顶点,这比仅仅拉回 contact 顶点要慢。假设这是您想要回答的常见问题,那么您应该考虑这一点。
我是 graphDB 的新手,我正在学习如何创建一个好的数据模型。
我必须管理 1000 万 "Contacts",我想按 "gender" 过滤它们。我创建了一个 POC,一切都很好,但我没有 understand/find 如果最好的解决方案是将性别保存为顶点:
或作为联系人顶点上的字段:
我知道每条边都会影响数据大小,但我没有找到任何关于这两种类型的数据管理的性能差异的参考资料。
你知道正确的做法吗?
在这个用例中,我会将性别作为顶点上的 属性 并在该 属性 上添加索引以获得您的答案。虽然从理论上讲,将性别作为一个单独的顶点更正确,但它有一些实际问题导致我建议第二种方法。
- 您建议的第一个模型将在您的图表中引入一个超节点。超节点是具有不成比例的大量入射边的节点。性别顶点将具有低选择性 (Male/Female/Unknown),因此每个顶点将具有数百万的 branching factor。这种级别的分支因素可能会导致各种性能问题,从而导致查询缓慢。将性别非规范化到顶点并添加索引应该可以解决大部分这些问题。可能仍然存在的唯一问题是 return 您可能会收到的 3-5 百万条记录所花费的时间。
- 在回答 "What is a person's gender?" 问题的第一种方法中,需要从 contact 顶点遍历到 gender[=20 的边=] 顶点,这比仅仅拉回 contact 顶点要慢。假设这是您想要回答的常见问题,那么您应该考虑这一点。