Debezium 博客
MySQL 5.7 引入了一种新的数据类型,用于 存储和处理 JSON 数据。客户端可以定义带有新 JSON 数据类型 列的表,并可以使用 SQL 语句和新的内置 JSON 函数来存储和读取 JSON 数据,这些函数可以从其他关系型列构建 JSON 数据,内省 JSON 值的结构,以及在 JSON 数据中进行搜索和操作。可以为表定义生成列,其值从同一表中的另一个列的 JSON 值计算得出,然后为这些生成列定义索引。总的来说,这是 MySQL 中一个非常强大的功能。
Debezium 的 MySQL 连接器将在即将发布的 0.3.4 版本中支持 JSON 数据类型。JSON 文档、数组和标量值将作为字符串出现在变更事件中,模式名称为 io.debezium.data.json。这将使消费者能够方便地处理 JSON 数据。顺便说一句,这与 MongoDB 连接器用于表示 JSON 数据的语义模式类型相同。
这听起来很简单,我们希望也是如此。但是 实现这一点 需要大量的工作。这是因为尽管 MySQL 以字符串形式向客户端应用程序公开 JSON 数据,但它在内部以一种特殊的二进制形式存储所有 JSON 数据,这种形式允许 MySQL 引擎在查询、JSON 函数和生成列中高效地访问 JSON 数据。所有 JSON 数据也以这种二进制形式出现在 binlog 中,这意味着如果我们想提取更有用的字符串表示形式,就必须自己解析二进制形式。编写和测试这个解析器花费了一些时间和精力,最终我们将其捐赠给了连接器内部用于读取 binlog 事件的优秀MySQL binlog 客户端库。