图建模技巧

目标
在本指南中,您会找到一些帮助您为业务领域设计数据模型的有用信息。对模型进行优化有助于开发者最大化系统和查询的性能。

建模技巧与窍门

正如您在阅读建模指南或自行进行图数据建模时可能发现的那样,模型没有唯一的“对”或“错”。某些方式可能更符合您的需求,并在您关注的方面表现更好,但您总有多种选择。

为了找到最适合您需求的数据模型,通常可以采用几种技术进行分析,并据此做出模型决策。下面的段落将介绍一些技巧与窍门,帮助您决定采用何种数据模型。

先编写查询

了解您希望对数据提出的各种问题和查询,是确定数据模型结构的绝佳方法。如果您的查询需要在特定日期范围内返回结果,那么日期最好不要作为节点属性,而是存放在单独的节点或关系中。相反,对于大学课程领域,寻找与当前课程相似的课程可能更适合使用高级别的分类层次结构,以便在某一学科主题下高效检索所有课程。

即使您暂时还不知道确切的查询语法,只要理解您正在构建的系统或应用的业务意图,并围绕这些业务需求来构建模型,也能使模型组织得更加精准。

优先考虑查询

要为每一种查询或功能找到完美模型几乎是不可能的。正如我们在建模设计指南中所讨论的,选择一种特定模型(或使用多模型)总会伴随权衡。您可以改进某些方面,但不可能提供“一刀切”的解决方案。

因此,您应当确定哪种模型最适合您的需求。您可能无法在每个单独查询上都达到极致性能,但可以在特定资源、时间和代码约束下,从系统中获得最大的价值。

为此,您需要决定哪些查询必须拥有最高性能,哪些功能是提供价值的关键。这可能是个艰难的决策,但无论使用何种技术,这类决定都会以某种形式出现。Neo4j 的优势在于模型具备灵活性,能够随您优先级的变化而调整。

测试一下

在设计阶段您可能未能预见的情形会在实际使用时出现。最好的发现方式之一,就是对模型进行实际测试。

将部分数据加载进系统并执行测试与查询,能够判断得到的结果是否满足需求以及是否达到预期的性能。Neo4j 同样具备灵活性,您可以调整模型或优化查询,以微调输出结果。

在多个模型之间难以抉择?可以为每个模型(以及它们的组合)创建概念验证(PoC)测试,观察实际运行情况。哪种方案过于复杂或不值得投入?是否有模型在真实环境中表现更佳,亦或是多模型方案才能提供最佳结果?有时唯一的答案就是用真实数据进行测试。

重构你的图

正如前述以及其他指南所指出的,Neo4j 始终支持改动。模型本身设计为灵活且易于调整,以适应业务需求和优先级的波动。用户行为的改变同样会导致业务需求的转变。

Cypher® 允许您编写查询,对标签进行批量更新、添加或移除属性,并向结构中插入额外的节点和关系。还有可用于批处理查询和对集群实例执行更新的过程(procedure),视具体环境而定。

想了解更多?请访问 APOC 库

其他关注点

数据集的规模也会影响查询和性能。若数据集较小,复杂查询的性能影响可能不明显;只有当数据量增长时,性能瓶颈才会显现。因此,数据模型和查询的优化对于最大化系统价值尤为关键。