设计注意事项

Neo4j-OGM 在将对象持久化到图中时,尝试最大限度地减少 Cypher 负载。这一点很重要,原因有两点。其一,在客户端‑服务器模式下,每一次网络交互都会产生开销(包括带宽消耗,更主要的是延迟),这会影响应用程序的响应时间。其二,包含冗余操作的请求(例如更新未改变的对象)是多余的,也会产生类似的影响。我们已经从多种方式来解决该问题。

可变深度持久化

您现在可以根据想要操作的图的各部分特性来定制持久化请求。这意味着您可以依据具体约束,对要传输的数据类型和数量进行微调,从而选择更深或更浅的抓取深度。

如果您确信不需要对象的关联对象,可以将 fetch-depth(抓取深度)设为 0,从而不进行抓取。相反,如果您始终希望获取某个人完整的朋友的朋友集合,则可以将深度设置为 2。

智能对象映射

Neo4j-OGM 引入了智能对象映射。这意味着在其他条件相同的情况下,能够可靠地检测出哪些节点和关系需要在数据库中更改,哪些则不需要。

了解哪些需要更改后,我们就不必向 Neo4j 发送大量请求去更新不需更改的对象,或创建已存在的关系。这样可以最小化跨网络传输的数据量,从而加快网络交互,并降低服务器的 CPU 消耗。

用户可定义的 Session 生命周期

支持智能对象映射功能的是可以在代码中管理其生命周期的 Session。例如,将其与单个 fetch-update-save 循环或工作单元关联起来。

较长的 Session 能够让您以更高的效率向数据库发出请求,但会消耗额外的内存。较短的 Session 则几乎不占用内存,却会导致在存取数据时向 Neo4j 发出的请求效率降低。