代码之家  ›  专栏  ›  技术社区  ›  Shady Aziza

复制关系与执行更多查询

  •  2
  • Shady Aziza  · 技术社区  · 6 年前

    我有以下架构。

    enter image description here

    你会在 HAS 关系。主要的是 Badge Skill 因为我想能够聚集/计数相同 技巧 来自不同的 徽章 相同的 User 是的。

    所以,重复的关系是 用户 技巧 .这是因为,例如,如果 Organization 想要了解单个或多个收件人的所有技能,我将遵循以下路径:

     Org -OWNS-> Badges -IS_AWARDED_To-> User -HAS-> Skill
    //Skill nodes for a specific or multiple user represent each skill contained in every Badge the user was awarded.
    

    但是,如果我不添加重复的关系 之间 用户 技巧 ,我将改为遵循以下路径:

    Org -OWNS-> Badges -IS_AWARDED_TO-> User -IS_AWARDED-> Badges -HAS-> Skill
    //Now I have all skills for a specific or multiple User for every badge awarded
    

    这两条路的区别是显而易见的。第一种方法将减少查询,但关系的重复是一个问题。第二个将消除复制问题(这是一个问题吗?)但有更多的疑问。我仍然是一个新手,我可以自由地告诉我,我的两个方法似乎都很复杂,而且有一个更优化的方法来达到我想要做的。

    1 回复  |  直到 6 年前
        1
  •  2
  •   logisima    6 年前

    你的两个模型都是有效的,你可以同时使用它们。

    但就像你说的,第一次你复制了一些数据。一般来说,当我们有一些性能问题时,我们会这样做。现在是你的案子吗?

    作为起点, 我建议你从模型2开始 (如果没有重复的话),如果你对这个模型有问题,你可以把它修改成模型1(它的灵活性对图形重构非常有用!)是的。

    在它中,没有什么是免费的:如果您复制一些数据以获得更好的读取性能,您将对写入产生影响。

    当你写一个 (badge)-[:HAS]->(skill) 关系,你还需要创建 (user)-[:HAS]->(skill) (更新或删除相同)。

    所以在更新图表时,需要保持这些数据的一致性。实际上,这就像是在创建一个sql存储视图。