高级连接信息

连接 URI

驱动程序支持连接到以下格式的 URI

<SCHEME>://<HOST>[:<PORT>[?policy=<POLICY-NAME>]]
  • <SCHEME>neo4jneo4j+sneo4j+sscboltbolt+sbolt+ssc 中的一个。

  • <HOST> 是 Neo4j 服务器所在的主机名。

  • <PORT> 是可选的,表示 Bolt 协议可用的端口。

  • <POLICY-NAME> 是可选的 *服务器策略* 名称。 服务器策略 需要在使用前设置。

驱动程序不支持连接到嵌套路径,例如 example.com/neo4j/。服务器必须可以从域根目录访问。

连接协议和安全

驱动程序和服务器之间的通信由 Bolt 协调。服务器 URI 的方案确定连接是否已加密,如果是,则接受哪种类型的证书。

URL 方案 加密 评论

neo4j

本地设置的默认值

neo4j+s

(仅限 CA 签署的证书)

Aura 的默认值

neo4j+ssc

(CA 和自签名证书)

无论实例是真正的集群环境还是单机环境,驱动程序在成功连接后都会从服务器接收 *路由表*。驱动程序的路由行为与 Neo4j 的集群 协同工作,将读/写事务定向到相应的集群成员。如果您想定位 *特定* 机器,请改用 boltbolt+sbolt+ssc URI 方案。

要使用的连接方案不是您的选择,而是由服务器要求决定的。您必须提前知道正确的服务器方案,因为在连接之前不会公开任何元数据。如果您不确定,请咨询数据库管理员。

身份验证方法

基本身份验证(默认)

基本身份验证方案依赖于传统的用户名和密码。这些可以是您本地安装的凭据,也可以是 Aura 实例提供的凭据。

from neo4j import GraphDatabase

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

基本身份验证方案还可以用于针对 LDAP 服务器进行身份验证(仅限企业版)。

Kerberos 身份验证

Kerberos 身份验证方案需要一个 base64 编码的票据。它只能在服务器安装了 Kerberos 附加组件 的情况下使用。

from neo4j import GraphDatabase, kerberos_auth

driver = GraphDatabase.driver(URI, auth=kerberos_auth(ticket))

承载者身份验证

承载者身份验证方案需要一个 base64 编码的令牌,该令牌由身份提供者通过 Neo4j 的 单点登录功能 提供。

from neo4j import GraphDatabase, bearer_auth

driver = GraphDatabase.driver(URI, auth=bearer_auth(token))
承载者身份验证方案需要 在服务器上配置单点登录。配置完成后,客户端可以通过 发现 API 发现 Neo4j 的配置。

自定义身份验证

使用函数 custom_auth 登录到具有自定义身份验证方案的服务器。

无身份验证

如果服务器上禁用了身份验证,则可以完全省略身份验证参数。

自定义地址解析器

创建 Driver 对象时,您可以指定一个 *解析器* 函数来解析驱动程序接收到的任何地址,然后再进行 DNS 解析。您的解析器函数会使用一个 Address 对象调用,并应返回一个 Address 对象的迭代器(或可用于构造 Address 对象的值)

连接到端口 9999 上的 example.com 将解析为端口 7687 上的 localhost
import neo4j


def custom_resolver(socket_address):
    # assert isinstance(socket_address, neo4j.Address)
    if socket_address != ("example.com", 9999):
        raise OSError(f"Unexpected socket address {socket_address!r}")

    # You can return any neo4j.Address object
    yield neo4j.Address(("localhost", 7687))  # IPv4
    yield neo4j.Address(("::1", 7687, 0, 0))  # IPv6
    yield neo4j.Address.parse("localhost:7687")
    yield neo4j.Address.parse("[::1]:7687")

    # or any tuple that can be passed to neo4j.Address().
    # This will initially be interpreted as IPv4, but DNS resolution
    # will turn it into IPv6 if appropriate.
    yield "::1", 7687
    # This will be interpreted as IPv6 directly, but DNS resolution will
    # still happen.
    yield "::1", 7687, 0, 0
    yield "127.0.0.1", 7687


driver = neo4j.GraphDatabase.driver("neo4j://example.com:9999",
                                    auth=(USERNAME, PASSWORD),
                                    resolver=custom_resolver)

其他连接参数

您可以在 API 文档 中找到所有 Driver 配置参数。

词汇表

LTS

*长期支持* 版本是保证支持多年的版本。Neo4j 4.4 是 LTS,Neo4j 5 也将有一个 LTS 版本。

Aura

Aura 是 Neo4j 的完全托管云服务。它提供免费和付费计划。

Cypher

Cypher 是 Neo4j 的图查询语言,它允许您从数据库中检索数据。它类似于 SQL,但适用于图形。

APOC

Cypher 上的强大过程 (APOC) 是一个(许多)函数库,这些函数无法用 Cypher 本身轻松表达。

Bolt

Bolt 是用于 Neo4j 实例和驱动程序之间交互的协议。默认情况下,它监听端口 7687。

ACID

原子性、一致性、隔离性、持久性 (ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据在发生故障的情况下保持准确和一致。

最终一致性

如果数据库提供保证,即所有集群成员将在 *某个时间点* 存储数据的最新版本,则该数据库最终一致。

因果一致性

如果读取和写入查询按相同的顺序被集群中的每个成员看到,则数据库因果一致。这比 *最终一致性* 更强。

NULL

空标记不是类型,而是值不存在的占位符。有关更多信息,请参阅 Cypher → 使用 null

事务

事务是工作单元,要么 *全部提交*,要么在失败时 *回滚*。一个例子是银行转账:它涉及多个步骤,但这些步骤必须 *全部* 成功或被撤销,以避免从一个帐户中扣除资金,而没有添加到另一个帐户中。

背压

背压是一种反作用于数据流的力量。它确保客户端不会被它无法处理的速度的数据所淹没。

事务函数

事务函数是 execute_readexecute_write 调用执行的回调。如果发生服务器故障,驱动程序会自动重新执行回调。

驱动程序

一个 Driver 对象包含建立与 Neo4j 数据库连接所需的详细信息。