首页 > 解决方案 > Neo4J 当你有 3 个主要实体时,最快的结构是什么?

问题描述

假设您有邮政编码、服务和客户。给定邮编和服务,我想尽快找到相应的客户。

选项:

  1. 客户通过“服务”关系连接到 zips。这似乎是最小的版本,搜索特定的 zip 并且只有一种类型的关系(目标服务)
  2. 客户连接到服务区,这些服务区指向不同的邮编和服务。在这里,我们搜索所有指向目标服务和目标 zip 的服务区域。
  3. 每个 Zip 都连接到它们独有的服务节点,然后连接到客户。所以当你搜索时,你去你想要的 zip,去服务,然后任何连接到那里的东西就是你想要的(这感觉就像我可能过度手持 neo4J)

这些不同的版本有不同的性能吗?我无法理解 Neo4J 中搜索格式的理论差异。图 2 是结果同时限制在两侧的示例,对于 1 和 3,您可以在过滤时在图表上线性移动,这有什么不同吗?

谢谢,布赖恩

标签: neo4j

解决方案


方法 1 有几个主要缺点。所有关于“服务”的数据(我假设是一家提供服务的公司)都必须在每个关联service关系中复制。这会浪费数据库中的存储空间。此外,如果您想查找特定服务的所有客户(无论邮政编码如何),您必须扫描每个service关系。

方法 2 为数据模型引入了一个额外的“服务区域”层,这似乎没有提供任何优势,只会使处理您的用例更加复杂和缓慢。

方法 3(我假设每个“服务”都有一个唯一的节点)应该是要走的路。没有数据重复,无需扫描即可找到所需的客户(无论您是从邮政编码开始,还是从服务开始)。


推荐阅读