Neo4j 驱动程序 API
Neo4j 驱动程序导出统一的 API。这允许在各个生态系统中共享驱动程序概念和命名,从而使语言之间以及多语言支持的转换更加容易和一致。
驱动程序对象
-
驱动程序
-
会话
-
事务
-
驱动程序配置
-
uri::字符串
-
auth::字典
-
user_agent::字符串
-
encrypted::布尔值
-
trust::字符串
-
-
会话配置
-
default_access_mode::字符串
-
database::字符串
-
fetch_size::整数
-
bookmarks::字符串列表
-
imp_user::字符串
-
-
事务配置
-
metadata::字典
-
timeout::整数
-
-
身份验证令牌
-
事务管理器
-
连接池
-
路由
-
Bolt 协议
-
PackStream
-
Neo4j 异常
-
驱动程序异常
URI 方案
未启用 TLS
-
bolt
:连接到单个 Neo4j 实例。 -
neo4j
:连接到 Neo4j 实例并使用路由表信息进行进一步连接。
启用 TLS 并允许自签名证书颁发机构
-
bolt+ssc
-
neo4j+ssc
启用 TLS 并仅允许系统启用的证书颁发机构并验证主机名
-
bolt+s
-
neo4j+s
客户端路由
Neo4j 支持集群设置并使用Raft 共识算法。
集群中的每个 Neo4j *主* 服务器都支持 routing
和 reading
。只能选择一个集群主服务器作为*领导者*,负责 write
操作。此选择可能会随着时间推移而轮换。驱动程序应支持路由表。*辅助* 服务器不参与 Raft 共识算法,但辅助服务器确实返回一个仅包含辅助服务器本身的路由表。
有关更多信息,请参阅操作手册 → 集群。
获取路由表
获取路由表的过程调用在 Neo4j 的各个版本中发生了很大变化。
Neo4j | Bolt | Bolt 消息 |
---|---|---|
4.3 |
4.3 |
|
4.4 |
4.4 |
|
Neo4j | Bolt | Bolt 消息 |
---|---|---|
4.3 |
4.3 |
|
4.4 |
4.4 |
|
C: 60 60 B0 17
C: 00 00 04 04 00 00 00 00 00 00 00 00 00 00 00 00
S: 00 00 04 04
C: HELLO {"scheme": "basic", "principal": "user", "credentials": "password", "user_agent": "Example/4.4.0", "routing": {"address": "localhost:9001", "policy": "example_policy", "region": "example_region"}}
S: SUCCESS {"server": "Neo4j/4.4.0", "connection_id": "bolt-123456789"}
C: ROUTE {"address": "localhost:9001", "policy": "example_policy", "region": "example_region"} ["neo4j-bookmark-transaction:1", "neo4j-bookmark-transaction:2"], {}
S: SUCCESS {"rt": {"ttl": 300, "db": "foo", "servers": [{"addresses": ["127.0.0.1:9001"], "role": "WRITE"}, {"addresses": ["127.0.0.1:9002"], "role": "READ"}, {"addresses": ["127.0.0.1:9001", "127.0.0.1:9002"], "role": "ROUTE"}]}}
C: GOODBYE
过程调用 <4.2
Neo4j | Bolt | Neo4j 过程调用 |
---|---|---|
3.5 |
3 |
|
4.0 |
4.0 |
|
4.1 |
4.1 |
|
4.2 |
4.2 |
Neo4j | Bolt | Bolt 消息 |
---|---|---|
3.5 |
3 |
|
4.0 |
4.0 |
|
4.1 |
4.1 |
|
4.2 |
4.2 |
|
C: 60 60 B0 17
C: 00 00 01 04 00 00 00 00 00 00 00 00 00 00 00 00
S: 00 00 01 04
C: HELLO {"scheme": "basic", "principal": "user", "credentials": "password", "user_agent": "Example/4.1.0", "routing": {"address": "localhost:9001", "policy": "example_policy", "region": "example_region"}}
S: SUCCESS {"server": "Neo4j/4.1.0", "connection_id": "bolt-123456789"}
C: RUN "CALL dbms.routing.getRoutingTable($context)" {"context": {"address": "localhost:9001", "policy": "example_policy", "region": "example_region"}} {"mode": "r", "db": "system"}
C: PULL {"n": -1}
S: SUCCESS {"fields": ["ttl", "servers"]}
S: RECORD [300, [{"addresses": ["127.0.0.1:9001"], "role": "WRITE"}, {"addresses": ["127.0.0.1:9002"], "role": "READ"}, {"addresses": ["127.0.0.1:9001", "127.0.0.1:9002"], "role": "ROUTE"}]]
S: SUCCESS {"bookmark": "example-bookmark:1", "type": "r", "t_last": 5, "db": "system"}
C: GOODBYE
集群和多个数据库
集群成员
集群包含*主* 成员和*辅助* 成员。
-
任何时候只能有一个主服务器是*领导者*(接受
writes
)。 -
集群中的每个数据库都有自己的Raft 组,并且每个数据库都有自己的路由表。换句话说,集群中每个数据库的主/领导者/辅助服务器可能不同。
-
集群中的任何主成员都可以为该集群中的任何数据库提供路由表。给定指向主成员的种子 URL,可以通过从主成员获取路由表来查找集群中的任何数据库。
此外,在 Neo4j 4.x 中
这些不适用于 Neo4j 5.x。 |
驱动程序路由表
驱动程序应防止路由表无限增长。如果尝试获取路由信息失败,则应从路由表中删除特定数据库的路由表。如果路由表无效,则应从路由表中删除特定数据库的路由表。无效的路由表可能是
-
路由表已超时,其中该路由表的
TTL
(生存时间)键已结束。 -
路由表指向不再存在的数据库。
这是驱动程序在为名为 foo
的数据库获取路由表时应遵循的工作流程。
-
查找数据库
foo
的路由表。 -
如果路由表中不存在该数据库,则创建一个空路由表,并将种子 URL 作为初始路由器。
-
如果路由表已过期,则使用查询刷新路由表,该查询指向一个集群成员。
-
如果发生任何错误,请从路由表映射中删除键
foo
。
唯一可能的错误是
-
安全错误
-
路由错误
-
服务不可用错误
,当驱动程序无法为所有现有路由器获取路由表时发生。