设计考量

Neo4j-OGM 试图在将您的对象持久化到图时最大程度地减少 Cypher 有效负载。这有两个原因。首先,在客户端-服务器模式下,每次网络交互都会涉及开销(带宽和延迟),这会影响应用程序的响应时间。其次,包含冗余操作(例如更新未更改的对象)的请求是不必要的,并且具有类似的影响。我们已经通过多种方式解决了这个问题

可变深度持久化

您现在可以根据要处理的图部分的特征来定制持久化请求。这意味着您可以根据您的个人约束条件,通过微调要传输的数据类型和数量来选择进行更深或更浅的提取。

如果您知道不需要对象的关联对象,则可以通过将提取深度指定为 0 来选择不提取它们。或者,如果您知道始终需要某人的完整的朋友的朋友集,则可以将深度设置为 2。

智能对象映射

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

知道需要更改什么意味着我们不需要向 Neo4j 发送大量请求来更新不需要更改的对象,或者创建已经存在的关联关系。因此,我们可以最大程度地减少跨网络发送的数据量,从而导致更快的网络交互,以及服务器上消耗的 CPU 周期更少。

用户可定义的会话生命周期

支持智能对象映射功能的是Session,其生命周期可以在代码中管理。例如,与单个提取-更新-保存循环或工作单元相关联。

较长时间运行的会话的优点是您能够对数据库发出更有效的请求,但代价是与会话相关的额外内存。较短会话的优点是它们几乎不会对内存造成任何开销,但存储和检索数据时,会对 Neo4j 发出效率较低的请求。