图模型技巧

目标
在本指南中,您将找到一些关于为您的领域设计数据模型的有用信息。优化模型可以帮助开发人员最大化系统和查询的性能。

建模技巧和窍门

正如您可能在阅读建模指南或您自己使用图数据建模的经验中发现的那样,没有正确或错误的建模方法。某些方法可能更适合您的需求,并且在您优先考虑的方面具有更高的性能,但您有很多选择。

为了找到最适合您需求的数据模型,通常有助于使用一些技巧来进行分析,并根据该分析做出数据模型决策。在接下来的段落中,我们将讨论一些技巧和窍门,以帮助您确定您的数据模型。

首先编写您的查询

了解您希望对数据提出的问题和查询类型是确定数据模型结构的绝佳方法。如果您知道您的查询需要在特定日期范围内返回结果,那么您可能应该确保日期不是节点上的属性,而是存储为单独的节点或关系。相反,对于大学课程领域,查找与当前课程类似的课程可能可以使用高级别类别层次结构,这使得搜索某个主题下的所有课程更加高效。

即使您尚不了解确切的查询语法,了解您正在构建的系统或应用程序的意图,然后围绕业务需求构建模型,将帮助您以更准确的方式组织它。

优先级查询

找到适合每个查询或功能的完美模型非常困难(如果不是不可能的话)。正如我们在建模设计指南中讨论的那样,选择一个特定的模型而不是另一个模型(或使用多个模型)存在权衡。虽然您可以改进某些方面,但无法获得一劳永逸的解决方案。

相反,您应该确定哪个模型适合您的需求。您可能无法在每个单独的查询上都最大化性能,但您可以通过某些资源、时间和代码来充分利用您的系统。

为此,您需要确定哪些查询必须绝对具有最大性能,以及哪些功能对于提供价值至关重要。这可能是一个艰难的决定,但无论您使用什么技术,这些决定都会以某种形式存在。Neo4j 更有价值的原因在于模型是灵活的,并且可以随着时间的推移根据您的优先级进行调整。

测试它

您可能会遇到在设计阶段没有意识到的场景。找到这些场景的最佳方法之一是实际测试模型。

加载部分数据并在系统上执行测试和查询将确定您收到的结果是否符合您的需求或预期性能。同样,Neo4j 是灵活的,因此您可以调整模型或优化查询以微调输出。

在多个模型之间难以做出决定?尝试为每个模型以及它们一起创建一个概念验证测试,并查看它们如何运行。什么很复杂或不值得麻烦?是否有一个在现实生活中表现得更好,或者多数据模型方法确实为您提供了最佳结果?有时,找到答案的最佳方法是使用实时数据对其进行测试。

重构您的图

如上所述以及其他指南中所述,Neo4j 始终可以进行更改。数据模型故意设计成灵活且易于调整,原因正是如此。业务需求和优先级往往会发生波动。用户也可能会改变他们的行为并导致业务发生变化。

Cypher® 允许您编写查询以在标签上运行批量更新、添加或删除属性以及将其他节点和关系插入结构中。还有一些过程可以帮助批量处理查询并在集群实例上执行更新(如果可用)。

有关此主题的更多信息,请查看APOC 库

其他问题

数据集的大小也会影响查询和性能。如果您有一个较小的数据集,那么您可能不会在更复杂的查询中看到太多性能影响。只有当您的数据量增长时,您才会看到越来越大的影响。这就是数据模型和查询优化对于最大化系统价值至关重要的原因。