查询路由决策

查询路由是决定使用哪个 Cypher 执行器(数据库)以及在哪个物理位置执行查询的过程。每个到达 Neo4j 服务器的查询(通过 Bolt 协议从驱动程序传入)都会经历这里描述的过程。

路由决策树

在执行查询之前,以下是在查询路由阶段做出的决定

步骤 1:确定目标数据库的名称

选择以下第一个有值的选项

步骤 2:重用打开的事务
  • 如果已经存在一个打开的事务连接到目标数据库(本地或远程),则继续执行步骤 6。

  • 如果没有,则继续执行步骤 3。

步骤 3:确定目标数据库的类型(执行上下文类型)
  • 如果目标数据库是此 DBMS 中的一个数据库,则上下文类型为 内部

  • 如果目标数据库是 复合数据库,则上下文类型为 复合

    这还允许查询针对多个数据库。

  • 如果目标数据库是 远程别名,则上下文类型为 外部

步骤 4:确定执行位置
  • 如果上下文类型为 内部

    • 并且 URI 模式为 bolt://(路由禁用),则位置为 本地

    • 并且事务模式为 READ

      • 并且数据库托管在本服务器上,则位置为 本地

      • 并且数据库托管在另一台服务器上

    • 如果事务模式为 WRITE

  • 如果上下文类型为 复合,则位置为 本地(对于此查询的这一部分)。

  • 如果上下文类型为 外部,则位置为 远程(使用配置中给定的 URI 和数据库)。

步骤 5:打开事务
  • 如果位置为 本地,则在本服务器上打开一个连接到该数据库的事务。

  • 如果位置为 远程,则使用步骤 4 中确定的 URI 打开一个连接到该数据库的驱动程序事务。

步骤 6:执行查询
  • 在打开的事务中执行查询。

说明性路由决策树

routing decisions
图 1. 说明性路由决策树