查询路由决策

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

路由决策树

在执行查询之前,这些是查询路由阶段所做的决策

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

选择其中第一个有值的项

步骤 2:重用开放事务
  • 如果目标数据库(本地或远程)已存在开放事务,则继续执行步骤 6。

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

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

  • 如果目标数据库是复合数据库,则上下文类型为“复合 (Composite)”。

    这也允许查询定位到多个数据库。

  • 如果目标数据库是远程别名,则上下文类型为“外部 (External)”。

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

    • 并且 URI 方案是 bolt:// (路由禁用),则位置是“本地 (Local)”。

    • 并且事务模式是 READ

      • 并且数据库托管在此服务器上,则位置是“本地 (Local)”。

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

    • 如果事务模式是 WRITE

      • 并且本地服务器是该数据库的主节点,则位置是“本地 (Local)”。

      • 并且另一个服务器是该数据库的主节点

  • 如果上下文类型是“复合 (Composite)”,则位置是“本地 (Local)” (针对此查询部分)。

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

步骤 5:打开事务
  • 如果位置是“本地 (Local)”,则在此服务器上打开到数据库的事务。

  • 如果位置是“远程 (Remote)”,则使用步骤 4 中确定的 URI 打开到数据库的驱动程序事务。

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

路由决策树图解

routing decisions
图 1. 路由决策树图解
© . All rights reserved.