我们今天的应用程序很多都依赖于数据库,用于持久保存数据。如:商品数据,订单数据等等。在许多场景中我们都需要把数据库实时产生的数据捕捉出来,传送到其它地方。比如:读写分离(将数据发送到搜索引擎中,象ES来做后期的查询),异地灾备(相当于把本地数据库在其它地方再备份一个,当出现意外情况时可以使用备库),数据迁移(数据库需要转移到另一个相同或不同的数据库中)等等。
在面对这些需求的时候,通常做为系统架构者都非常头疼,如何才能及时、稳定、高效的捕捉到这些变化的数据呢?比较简单的方案就是通过表的时间戳,定时去抽取变化的数据,还可以通过触发器、比对、日志等方法。这些方法都各有优劣,平衡性最好的方法就是基于日志的CDC方案了。可以将增删改,甚至是数据库结构变化都可以捕捉到。但如何基于日志去同步数据呢?
在一些数据库中会有自己的方案和工具,比如Oracle数据库,就有物化视图,Golden Gate等方法来同步数据。但也都有一些局限,象物化视图,采用间隔时间调度的方法,且需要同是Oracle才可以实现。Golden Gate是一种基于日志非常强大的实时同步方法,但其是一个商用产品,且价格不菲。
当然也有一些数据库会有开源的同步方案可以选择。比如Mysql数据库就有Canal,Maxwell等方案来