协调事务并强制因果一致性

在使用集群时,书签允许您链式事务并强制因果一致性。书签是一种表示数据库某种状态的令牌。将一个或多个书签随查询一起传递时,服务器将确保在对应的状态已建立之前,查询不会被执行。

所有响应均包含一个 bookmarks 字段,列出编码后的书签,这些书签代表事务已提交更改的状态。

示例响应

{
  "data": {
    "fields": [
      "n"
    ],
    "values": [
      [
        {
          "elementId": "4:ff04df25-ff2b-4b55-98f8-6888297b025e:0",
          "labels": [
            "Person"
          ],
          "properties": {
            "name": "Alice",
            "age": 42
          }
        }
      ]
    ]
  },
  "bookmarks": [
    "FB:kcwQ/wTfJf8rS1WY+GiIKXsCXgmQ"
  ]
}

您可以通过请求体中的 bookmarks 键向后续事务提供书签列表。服务器在追上书签中封装的更改后才会执行提交的事务。

在下例中,服务器只有在记录了与书签 FB:kcwQt8DpQx5zR0uN3Oj/OudM3QaQFB:kcwQy9mp3ioyRom386bZDRRcuCiQ 关联的更改后,才会执行事务。

请求示例

POST https://:7474/db/neo4j/query/v2
Authorization: Basic bmVvNGo6dmVyeXNlY3JldA==
Content-Type: application/json
{
  "statement": "MATCH (p1:Person {name: $source}) MATCH (p2:Person {name: $end}) MERGE p=(p1)-[:LIKES]->(p2) RETURN p",
  "parameters": {
    "source": "Alice",
    "end": "Lucy"
  },
  "bookmarks": ["FB:kcwQt8DpQx5zR0uN3Oj/OudM3QaQ", "FB:kcwQy9mp3ioyRom386bZDRRcuCiQ"]
}

服务器返回的书签不应被客户端解析或修改,需原样插入 bookmarks 字段。

术语表

Aura

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

Cypher

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

ACID

原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation)、持久性 (Durability) (ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保即使发生故障,数据库中的数据也能保持准确和一致。

因果一致性

如果集群的每个成员都以相同的顺序看到读写查询,则该数据库具有因果一致性。这比最终一致性更强。

事务

事务是一个工作单元,要么被提交,要么在失败时被回滚。例如银行转账:它涉及多个步骤,但它们必须全部成功或全部撤销,以避免钱从一个账户扣除却未存入另一个账户的情况。