运行并发事务

该驱动程序与 Python 的asyncio兼容,这允许实现并发工作流。要以异步方式与数据库交互,请使用AsyncGraphDatabase.driver()创建一个AsyncDriver。工作流程与同步版本非常相似,除了您必须在所有异步调用上使用await,并将所有应等待的函数定义为async。如果您需要跨不同事务的因果一致性,请使用书签

使用execute_query的异步驱动程序示例
import asyncio
from neo4j import AsyncGraphDatabase


URI = "<URI for Neo4j database>"
AUTH = ("<Username>", "<Password>")


async def main():
    async with AsyncGraphDatabase.driver(URI, auth=AUTH) as driver:
        records, summary, keys = await driver.execute_query(
            "MATCH (a:Person) RETURN a.name AS name",
            database_="neo4j"
        )
        names = [record["name"] for record in records]
        print(names)


if __name__ == "__main__":
    asyncio.run(main())
使用事务函数的异步驱动程序示例
import asyncio
from neo4j import AsyncGraphDatabase


URI = "<URI for Neo4j database>"
AUTH = ("<Username>", "<Password>")


async def main():
    async with AsyncGraphDatabase.driver(URI, auth=AUTH) as driver:
        async with driver.session(database="neo4j") as session:
            records = await session.execute_read(get_people)
            print(records)


async def get_people(tx):
    result = await tx.run("MATCH (a:Person) RETURN a.name AS name")
    records = await result.values()
    return records


if __name__ == "__main__":
    asyncio.run(main())
Async 实现了一种并发模型,但它不是唯一可能的模型。多线程也是可能的,尽管asyncio在应用程序中通常更容易实现。
Python 3.8 和异步驱动程序存在一个已知问题,即它会逐渐变慢。通常建议使用最新支持的 Python 版本以获得最佳性能、稳定性和安全性。

词汇表

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 数据库连接所需的详细信息。