对使用变更数据(CDC)进行数据同步的研究讨论
这篇文章是ZOZO Technologies的2019年第2个圣诞月历,第23天的文章。
昨天是@amagasu1234先生的“尝试在Ruby On Rails中添加Google reCAPTCHA v3”。
另外,今年共有五个圣诞倒数日历被公开。
-
- ZOZOテクノロジーズ #1 Advent Calendar 2019
-
- ZOZOテクノロジーズ #2 Advent Calendar 2019
-
- ZOZOテクノロジーズ #3 Advent Calendar 2019
-
- ZOZOテクノロジーズ #4 Advent Calendar 2019
- ZOZOテクノロジーズ #5 Advent Calendar 2019
首先
因为我正在调查Change Data Capture(以下简称CDC),所以打算总结一下其内容。
首先,我将解释为什么要考虑CDC。
在 ZOZOTOWN 中使用的主要数据库是 SQL Server。
在公司内部有各种服务运行,并且各个服务连接到 SQL Server。

近年来,根据用途不同,除了SQL Server之外的数据库的使用情况有所增加。
每次都面临的一个问题是如何进行“迁移(数据同步)”。
而且,如果只是一次性的迁移,那就很好办。但是,由于数据是由各个服务注册在原始的SQL Server上,因此通常需要在迁移目标处实时进行数据同步。
将各项服务转变为微服务,并使其能够直接读写新的数据库是理想的方案,但实现这一目标似乎还需要一段时间。
考虑使用 CDC 将数据从 SQL Server 同步到其他数据库。通过使用 CDC,可以实现与各个云特有数据库(例如:Aurora、BigQuery 等)之间的数据同步。

关于疾控中心的信息
CDC是数据变更捕获的功能,可以追踪发生在数据库中的变更信息。在另一篇文章中有更详细的概述。确认了SQL Server的Change Data Capture(CDC)功能。
通过使用 CDC,可以追踪原始 SQL Server 的变更信息。
由于无法将数据同步到目标位置,因此需要使用数据同步工具。
Debezium (得贝兹姆)
Debezium是一個可以將數據庫變更轉換為事件串流的分散式平臺。
您可以設定CDC來追蹤SQL Server的變更並獲取變更信息,然後將其與其他數據庫進行協同作業。

就像上面所述,Debezium可以利用Kafka来实现与其他数据库的协同工作。SQL Server和Elasticsearch仅作为示例,因此可以用其他数据库替代。
我在另一篇文章中总结了概述。
使用Debezium获取MySQL的更改数据
使用Debezium获取SQL Server的更改数据
询问的问题
通过CDC + Debezium,我们发现可以将数据同步到其他数据库中。
然而,我们也发现了一些问题。
-
- SQL Server の CDC を利用した場合、初期データ移行を別途考える必要がある。CDC は設定した時点からのデータが追跡されます。そのため、既に入っているデータを追跡することができません。すべてのデータを一度更新するか、別の方法で初期データを移行してからでないとデータを同期できません。
- テーブルの変更(DDL)が自動で反映されない。例えば、カラムの追加や削除があった場合に変更された内容が、CDC の変更情報として保存されますが、それが Debezium で取得できません。何か別で変更を検知して、反映させる仕組みが必要となります。
请留意
-
- CDC を利用すると SQL Server上に変更データが保存されます。つまりデータの更新が多い場合や、保存期間が長い場合、かなりのデータ量となるため気をつける必要があります。
- 変更データの保存(書き込み)があるため、SQL Server に少なからずオーバーヘッドがあります(トリガーよりはオーバーヘッドが少ないと言われています)。
准备考试
在另一篇文章中,罗列了当改变表的列时可能会发生什么情况。针对 SQL Server 的 Change Data Capture(CDC)来处理列的变更情况。
CDC + Debezium 调查结果
我们决定不使用”CDC+Debezium”来进行追加开发(包括初期迁移和DDL支持)和运营。当然,如果深入研究,也不是完全做不到,但我们认为没有必要做到那个程度。对于CDC的理解加深是好事。
未来
因为数据同步的需求并没有消失,所以我们目前正在尝试使用attunity replication。
与Debezium的区别在于,虽然Debezium是免费的,但attunity replication是收费的。
另外,即使使用attunity replication,也需要在SQL Server上进行CDC设置。
总之,获取数据变更信息仍然需要在原始数据库中输出变更信息。
attunity replication具有以下吸引人的功能。
-
- 初期データ同期が可能
-
- 同期完了した後でもデータの再同期(全データ入れ替え)が可能
- DDL による変更に対応
除了还有许多其他功能,但我觉得在Debezium中,很多事情是不可能实现的,如果不考虑机制。
顺便提一下,AWS DMS的内部似乎类似于attunity。
由于我还没有在生产环境中使用它,所以我会继续进行验证。
这篇文章到此为止!
由于明天起我们还将继续推出圣诞日历活动,请务必继续关注其他作者的文章哦!