运行并发事务
该驱动程序与 Python 的 asyncio
兼容,这允许实现并发工作流。要以异步方式与数据库交互,请使用 AsyncGraphDatabase.driver()
创建一个 AsyncDriver
。其工作流与同步版本非常相似,只是您必须对所有异步调用使用 await
,并将其定义为 async
所有应被等待的函数。如果您需要在不同事务之间实现因果一致性,请使用书签。
execute_query
的异步驱动程序示例import asyncio
from neo4j import AsyncGraphDatabase
URI = "{neo4j-database-uri}"
AUTH = ("{neo4j-username}", "{neo4j-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 = "{neo4j-database-uri}"
AUTH = ("{neo4j-username}", "{neo4j-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())
异步实现了并发模型,但它不是唯一可能的模型。多线程也是可能的,尽管 asyncio 在应用程序中通常更容易实现。 |
Python 3.8 和异步驱动程序存在一个已知问题,即它会逐渐变慢。通常建议使用最新支持的 Python 版本以获得最佳性能、稳定性和安全性。 |
词汇表
- LTS
-
长期支持 (Long Term Support) 版本是指保证支持多年的版本。Neo4j 4.4 是 LTS 版本,Neo4j 5 也将拥有 LTS 版本。
- Aura
-
Aura 是 Neo4j 的全托管云服务。它提供免费和付费计划。
- Cypher
-
Cypher 是 Neo4j 的图查询语言,允许您从数据库中检索数据。它类似于 SQL,但适用于图。
- APOC
-
Awesome Procedures On Cypher (APOC) 是一个库,包含许多无法在 Cypher 本身轻松表达的函数。
- Bolt
-
Bolt 是 Neo4j 实例和驱动程序之间交互所使用的协议。它默认监听端口 7687。
- ACID
-
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)(ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据即使在发生故障时也能保持准确和一致。
- 最终一致性
-
如果数据库提供保证所有集群成员在某个时间点将存储最新版本数据,则称其为最终一致的。
- 因果一致性
-
如果集群的每个成员都能以相同的顺序看到读写查询,则数据库是因果一致的。这比最终一致性更强。
- NULL
-
null 标记不是一种类型,而是表示值缺失的占位符。有关更多信息,请参阅Cypher → 使用
null
。 - 事务
-
事务是一个工作单元,它要么被完整地提交,要么在失败时被回滚。一个例子是银行转账:它涉及多个步骤,但所有步骤都必须成功或被撤销,以避免钱从一个账户中扣除而没有添加到另一个账户中。
- 反压
-
反压是一种阻碍数据流动的力。它确保客户端不会被超出其处理能力的数据量所淹没。
- 事务函数
-
事务函数是由
execute_read
或execute_write
调用执行的回调。驱动程序在服务器故障时会自动重新执行该回调。 - 驱动程序
-
一个
Driver
对象包含与 Neo4j 数据库建立连接所需的详细信息。