运行并发事务
驱动兼容 Python 的 asyncio,它允许实现并发工作流。要以异步方式与数据库交互,请使用 AsyncGraphDatabase.driver() 创建一个 AsyncDriver。该工作流与同步版本非常相似,只是必须在所有异步调用上使用 await,并将所有需要等待的函数定义为 async。如果需要在不同事务之间实现 因果一致性,请使用 书签。
execute_query 的异步驱动示例import asyncio
from neo4j import AsyncGraphDatabase
URI = "<database-uri>"
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_="<database-name>"
)
names = [record["name"] for record in records]
print(names)
if __name__ == "__main__":
asyncio.run(main())
import asyncio
from neo4j import AsyncGraphDatabase
URI = "<database-uri>"
AUTH = ("<username>", "<password>")
async def main():
async with AsyncGraphDatabase.driver(URI, auth=AUTH) as driver:
async with driver.session(database="<database-name>") 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 (长期支持版)
-
长期支持 (Long Term Support) 版本是保证在若干年内得到支持的版本。Neo4j 4.4 和 5.26 是 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
-
空标记不是一种类型,而是缺失值的占位符。更多信息,请参阅 Cypher → 使用
null。 - 事务
-
事务是一个工作单元,要么被提交,要么在失败时被回滚。例如银行转账:它涉及多个步骤,但它们必须全部成功或全部撤销,以避免钱从一个账户扣除却未存入另一个账户的情况。
- 背压
-
背压是对数据流的抵抗力。它确保客户端不会被过快发送的数据压垮,从而超出其处理能力。
- 书签
-
书签是代表数据库某种状态的标记。通过将一个或多个书签与查询一起传递,服务器将确保在所表示的状态建立之前,该查询不会被执行。
- 事务函数
-
事务函数是由
execute_read或execute_write调用执行的回调。如果发生服务器故障,驱动程序会自动重新执行该回调。 - 驱动程序 (Driver)
-
一个
Driver对象保存了与 Neo4j 数据库建立连接所需的详细信息。