更改事件格式

更改事件的内容根据实体类型(节点或关系)的不同而有所不同。

节点更改

节点更改事件格式
{
  "id": "A7fjWXMK_0L6hztd4xhoy0oAAAAAAAAADAAAAAAAAAAA", (1)
  "txId": 12, (2)
  "seq": 0, (3)
  "metadata": {
    "executingUser": "neo4j", (4)
    "authenticatedUser": "neo4j", (5)
    "captureMode": "FULL", (6)
    "connectionClient": "127.0.0.1:51320", (7)
    "serverId": "e605bd8f", (8)
    "databaseId": "edec6ba8-e82f-4aac-ae41-2725f2357fdd", (9)
    "connectionType": "bolt", (10)
    "connectionServer": "127.0.0.1:51316", (11)
    "txStartTime": "2023-03-03T11:58:30.429Z", (12)
    "txCommitTime": "2023-03-03T11:58:30.526Z", (13)
    "txMetadata": { (14)
      "correlationId": "123456789"
    }
  },
  "event": {
    "elementId": "4:b7e35973-0aff-42fa-873b-5de31868cb4a:1", (15)
    "keys": { (16)
      "Person": [
        {
          "firstName": "john",
          "lastName": "doe"
        },
        {
          "ssn": "Y654321"
        }
      ],
      "Employee": [
        {
          "id": 1001
        }
      ]
    },
    "eventType": "n", (17)
    "state": {
      "before": null, (18)
      "after": { (19)
        "properties": { (20)
          "tagline": "Houston, we have a problem.",
          "title": "Apollo 13",
          "released": "1995"
        },
        "labels": ["MOVIE"] (21)
      }
    },
    "operation": "c", (22)
    "labels": ["MOVIE"] (23)
  }
}
1 一个唯一的更改标识符,用于标识此更改记录。它可用于查询从此更改开始的更改。
2 一个数字,标识更改发生的交易,与seq组合唯一。交易标识符不是连续的(某些交易,例如系统和架构命令,不会记录在更改数据捕获中,并导致交易标识符出现间隙)。
3 一个用于对同一交易中发生的更改进行排序的数字。输出中观察到的更改顺序不一定对应于交易期间应用更改的顺序。
4 执行此更改的用户。在使用模拟时,可能与authenticatedUser不同。
5 执行此更改时的已认证用户。
6 捕获此更改时的事务日志 CDC 模式。
7 客户端的地址(通常是 IP 地址和端口,但可能会根据协议而改变)。
8 执行此更改的服务器的标识符。有关服务器的更多信息,请参阅操作手册→集群→管理集群中的服务器
9 数据库唯一 ID。有关管理多个数据库的更多信息,请参阅操作手册→数据库管理
10 客户端通过其连接的协议。
11 服务器的地址(通常是 IP 地址和端口,但可能会根据协议而改变)。
12 底层交易开始时的的时间戳。
13 底层交易提交时的的时间戳。
14 执行操作时与交易关联的元数据。
15 已更改实体(节点或关系)的elementId
16 标识已更改实体的键。这需要在已更改实体上定义键约束,有关详细信息,请参阅elementIds 和键属性的作用
17 已更改实体的类型:节点为n,关系为r
18 描述实体在更改之前状态的映射。对于创建事件,此字段始终为NULL。在DIFF CDC 模式下,它仅限于已更改实体的属性和标签。无论 CDC 模式是否设置为DIFFFULL,此字段始终包含删除事件的实体的完整状态。
19 描述实体在更改之后状态的映射。对于删除事件,此字段始终为NULL。在DIFF CDC 模式下,它仅限于已更改实体的属性和标签。无论 CDC 模式是否设置为DIFFFULL,此字段始终包含创建事件的实体的完整状态。
20 更改后实体的属性映射。
21 应用更改后节点标签的列表。在DIFF CDC 模式下,它仅限于已更改的标签。
22 操作类型:c表示创建,u表示更新,d表示删除。
23 应用更改之前节点标签的列表。它包含完整的标签集,而不管 CDC 模式如何。

关系更改

关系的更改事件遵循与节点更改类似的模式。
下面仅注释了差异。

关系更改事件格式
{
  "id": "A2pK9P_aOknnrnEsCsPB_BoAAAAAAAAADwAAAAAAAAAA",
  "txId": 15,
  "seq": 0,
  "metadata": {
    "executingUser": "neo4j",
    "authenticatedUser": "neo4j",
    "captureMode": "FULL",
    "connectionClient": "127.0.0.1:51190",
    "serverId": "2230d17a",
    "databaseId": "edec6ba8-e82f-4aac-ae41-2725f2357fdd",
    "connectionType": "bolt",
    "connectionServer": "127.0.0.1:51186",
    "txStartTime": "2023-03-03T11:54:40.510Z",
    "txCommitTime": "2023-03-03T11:54:40.773Z",
    "txMetadata": {
      "correlationId": "987654321"
    }
  },
  "event": {
    "elementId": "5:6a4af4ff-da3a-49e7-ae71-2c0ac3c1fc1a:0",
    "start": { (1)
      "elementId": "4:6a4af4ff-da3a-49e7-ae71-2c0ac3c1fc1a:0", (2)
      "keys": {}, (3)
      "labels": ["PERSON"] (4)
    },
    "end": { (5)
      "elementId": "4:6a4af4ff-da3a-49e7-ae71-2c0ac3c1fc1a:1",
      "keys": {},
      "labels": [
        "MOVIE"
      ]
    },
    "eventType": "r",
    "state": {  (6)
      "before": null,
      "after": {
        "properties": {
          "roles": "Jack Swigert"
        }
      }
    },
    "type": "ACTED_IN", (7)
    "operation": "c",
    "keys": [ (8)
      {
        "registerId": 1125
      },
      {
        "official": "Alice Roberts"
      }
    ]
  }
}
1 包含有关起始节点信息的映射。
2 起始节点的 ElementId。
3 起始节点的键(如果定义了相关约束)。
4 起始节点的标签列表。
5 上面为结束节点定义的相同信息集。
6 由于关系没有标签,因此在之前/之后状态中没有标签字段。
7 关系类型。
8 标识已更改实体的键。这需要在已更改实体上定义键约束,有关详细信息,请参阅elementIds 和键属性的作用