协调事务并强制因果一致性
在处理集群时,书签允许您链接事务并强制执行因果一致性。书签是表示数据库某些状态的令牌。通过在查询中传递一个或多个书签,服务器将确保在建立表示的状态之前不会执行该查询。
在提交事务的请求(即到tx/commit
和tx/<n>/commit
端点)中,响应包含一个lastBookmarks
键,其中包含一个编码书签数组,表示事务已提交更改的状态。
示例请求
POST http://localhost:7474/db/neo4j/tx/commit
Accept: application/json;charset=UTF-8
Content-Type: application/json
Authorization: Basic bmVvNGo6dmVyeXNlY3JldA==
{
"statements": [
{
"statement": "MERGE (p1:Person {name: $name}) MERGE (p2:Person {name: $otherName}) RETURN p1.name, p2.name",
"parameters": {
"name": "Alice",
"otherName": "Bob"
}
}
]
}
示例响应
200: OK
Content-Type: application/json;charset=utf-8
{
"results": [ {
"columns": [ "p1.name", "p2.name" ],
"data": [ {
"row": [ "Alice", "Bob" ],
"meta": [ null, null ]
} ]
} ],
"errors": [],
"lastBookmarks": [
"FB:kcwQt8DpQx5zR0uN3Oj/OudM3QaQ"
]
}
如果要将这些事务因果链接在一起,则可以在后续事务的Bookmarks
标头中使用响应中返回的书签。此标头应包含书签字符串列表。在执行提交的事务之前,服务器会等待它赶上封装在书签中的更改。
在下面的示例中,服务器在注册与书签FB:kcwQt8DpQx5zR0uN3Oj/OudM3QaQ
和FB:kcwQy9mp3ioyRom386bZDRRcuCiQ
关联的更改之前不会执行事务。
示例请求
POST http://localhost:7474/db/neo4j/tx/commit
Accept: application/json;charset=UTF-8
Content-Type: application/json
Authorization: Basic bmVvNGo6dmVyeXNlY3JldA==
Bookmarks: ["FB:kcwQt8DpQx5zR0uN3Oj/OudM3QaQ", "FB:kcwQy9mp3ioyRom386bZDRRcuCiQ"]
{
"statements": [
{
"statement": "MATCH (p1:Person {name: $source}) MATCH (p2:Person {name: $end}) MERGE (p1)-[:LIKES]->(p2)",
"parameters": {
"source": "Alice",
"end": "Bob"
}
}
]
}
服务器返回的书签不打算由客户端解析或修改,而应按原样插入到 |
术语表
- Aura
-
Aura 是 Neo4j 的完全托管云服务。它提供免费和付费计划。
- Cypher
-
Cypher 是 Neo4j 的图查询语言,允许您从数据库中检索数据。它类似于 SQL,但用于图。
- ACID
-
原子性、一致性、隔离性、持久性 (ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据在发生故障时保持准确和一致。
- 因果一致性
-
如果读取和写入查询以相同的顺序由集群的每个成员看到,则数据库具有因果一致性。这比最终一致性更强。
- 事务
-
事务是完整提交或在失败时回滚的工作单元。例如银行转账:它涉及多个步骤,但它们必须全部成功或被撤销,以避免从一个帐户中扣除资金但未添加到另一个帐户中。