Neo4J当您有3个主要实体时,最快的结构是什么?

Neo4J当您有3个主要实体时,最快的结构是什么?,neo4j,Neo4j,假设你有邮政编码、服务和客户。如果有邮政编码和服务,我想尽快找到相应的客户 选项: 客户通过“服务”关系连接到ZIP。这似乎是最小的版本,搜索特定的zip和一种类型的关系(目标服务) 客户连接到服务区,服务区指向不同的拉链和服务。在这里,我们搜索指向目标服务和目标邮政编码的所有服务区域 每个拉链都连接到它们唯一的服务节点,然后连接到客户。所以当你搜索的时候,你去你想要的邮政编码,去服务,然后连接到那里的任何东西都是你想要的(这感觉就像我可能过度地用手握住neo4J) 这些不同的版本有不同的性能吗

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

选项:

  • 客户通过“服务”关系连接到ZIP。这似乎是最小的版本,搜索特定的zip和一种类型的关系(目标服务)
  • 客户连接到服务区,服务区指向不同的拉链和服务。在这里,我们搜索指向目标服务和目标邮政编码的所有服务区域
  • 每个拉链都连接到它们唯一的服务节点,然后连接到客户。所以当你搜索的时候,你去你想要的邮政编码,去服务,然后连接到那里的任何东西都是你想要的(这感觉就像我可能过度地用手握住neo4J)
  • 这些不同的版本有不同的性能吗?我很难理解Neo4J中搜索格式的理论差异。2是一个示例,其中结果一次限制在两个边上,对于1和3,您可以在过滤时在图形上线性移动,这有区别吗

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

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


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

    对于#3,我建议每个邮政编码都有自己独特的“服务”节点,用于每种服务类型。我觉得我需要这种复制,因为客户可能在一个拉链中“教游泳课”,但在另一个拉链中“阅读课”。每个邮政服务组合中,客户基本上要么在营业中,要么不在营业中。这是否与您所说的相同,每个zip都有自己的服务节点集,还是我误解了?我的假设是“服务”是指提供大量服务的公司。但听起来你好像在说“客户”是一系列服务的提供者?无论如何,服务提供者如此挑剔,只向特定的邮政编码提供服务,而不向其他人提供服务,这似乎很奇怪。但如果真的发生了这种情况,您可以创建第二个服务节点。是的,一个客户可以提供多个服务,所以现在我有了zip=>Service=>customer,这些服务跨拉链复制。这就是我考虑“服务区”(SA)概念的原因,在这个概念中,SA连接到服务和拉链,并且只适用于一个客户。因此zip=>SA=>service,客户被附加到SA或属性。额外的数据层消除了重复服务的需要,但如果这减慢了我的搜索速度(zip+服务=>客户列表),那么我不想走这条路。如果是我,我会用更直观的术语“提供者”替换术语“客户”。此外,我不明白为什么一个“提供者”提供的单一“服务”不能通过关系连接到任何一组邮政编码。你应该考虑你是否真的有一个需要复制的用例。