首页
学习
活动
专区
工具
TVP
发布

数据库同步的一些想法

目前从事数据交换类工作,总结一些实现思路。主流关系型数据库基本都支持主从复制,但也有场景需要使用应用程序来同步数据,比如信息整合,网间数据交换,不只是数据库同步,部分也有文件同步的需求。同步的关键在于监控数据变化,提取数据,网络传输至接收落地。

数据变化的监控

对于数据库最简单的方式就是使用触发器,大部分的实现是将表的增删改记录到一个中间表中,应用程序定时扫描中间表,抽取数据。这种实现方式好处是简单,但缺点也显而易见,比如 MySQL 5.7 之前 不支持一个表创建多个触发器,具有一定的侵入性。

另一个方法就是使用日志,如 MySQL 的 binlog、Oracle 的 redolog,对应用不具有侵入性。利用日志的原理是数据库会把所有的操作都记录下来,用来进行恢复,正好我们也可以通过检查点(checkpoint)监控日志的变化,抽取 DML 操作来进行同步。难点就在于二进制文件的解析,开源的还好,不开源的如 oracle 的 redolog,不是不能做,只不过文档有限,需要大量的测试寻找规律。

文件变化的监控,无非就是大小和修改时间的比较,这个和平台关联比较大,比如文件拷贝,Linux 下文件大小一直变化,而 Windows 下则直接是实际大小。还有关于多进程并行读写文件的问题,Windows 文件系统默认进程独占文件,同时只能有一个进程读写,而 Linux 下的文件默认不是强制锁定,对强制锁定也支持有限,况且用户使用的 Linux 版本也比较多样化,借助内核肯定没戏了,这个问题也只能在应用层面解决。

数据传输

一种借助 JMS 消息队列,以 JSON 或 XML 为载体,利用其发布订阅的特性,分布式部署前置机,构建一个数据交换共享平台。

另一种是自定义协议,使用二进制进行传输,这种就是网络编程,Java 的话,可利用 Netty 等一些网络框架,分布式或一对多就需要自己控制,有时应用在安全隔离的环境下,还要在隔离设备如网闸上配合代理使用。

小结

数据库的同步是多样化的,如关系型数据库同构和异构间同步,关系型和非关系型数据库间同步,整体来讲,技术上难度不大,但要做一个高性能高可用的软件还是要花费一定的心力的,欢迎关注 pump(https://github.com/wskwbog/pump) 项目,专注数据交换。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G20W1M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券