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

在使用集群时,书签允许您链接事务并强制执行因果一致性。书签是一个代表数据库某些状态的标记。通过将一个或多个书签与查询一起传递,服务器将确保查询不会在所代表的状态建立之前执行。

所有响应都包含一个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 http://localhost: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

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

因果一致性

如果读取和写入查询在集群中的每个成员处按相同顺序显示,则数据库因果一致。这比最终一致性更强。

事务

事务是一个工作单元,要么完全提交,要么在发生故障时回滚。例如银行转账:它涉及多个步骤,但它们必须全部成功或被恢复,以避免从一个账户中扣除资金而没有添加到另一个账户中。