前言
当MySQL操作完数据后如果将数据同步到ElasticSearch中,或者还要同步到MongoDB中,而且操作MySQL和ElasticSearch和MongoDB的分属于多个部门应该怎么办,如果采用调用别的部门的api来进行ElasticSearch和MongoDB的异构数据同步,肯定会增加沟通成本的和Bug产生的几率,所以我们需要一种别的方式来解决MySQL的异步数据同步。
解决方案
一.采用阿里canal来进行异构数据同步
当MySQL执行一条sql语句后,会在binlog中记录下本次执行的sql语句,canal就会监听到执行的sql语句,并调用已经写好的向ElasticSearch或MongoDB中添加数据的Java代码,从而实现MySQL的异构数据同步。
使用了canal之后很方便的解决异构数据同步的问题,但不能很好地解决多个部门之间解耦的问题,所以还是需要别的方式来解决多个部门之间解耦的问题。
二.采用消息队列来进行异构数据同步
我们可以在多个数据库之间新增一个消息队列,当MySQL的数据发生变化时,向消息队列发送一个数据变化的消息,而订阅这个消息队列的其他数据库收到数据变化的消息后就可以修改自身的数据,这样既可以保证异构数据的一致性,同时也可以保证多个部门之间的解耦。
结尾
如果担心消息队列的方式会造成数据的丢失,可以在每天进行一个日终任务,通过扫描的方式同步数据。
感谢观看,如果对你有帮助请点个赞,谢谢。
|