SyncNavigator
专业的数据库同步软件!

深入数据库同步技术(3)-da-syncer介绍

购买事宜请联系QQ:1793040

HKROnline SyncNavigator企业版 8.4.1 使用教程SyncNavigator的基本功能:自动同步数据/定时同步数据无论是实时同步/24小时不间断同步,支持sqlserver 2000-2014所有版本,全兼容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。

SyncNavigator是一款高效的数据库同步工具,支持sqlserver数据库和mysql数据库,采用增量同步的方式实时保存数据库数据。

购买咨询qq1793040

因为是增量同步,记录每次同步时间戳,所以同步效率很高,不用每次整个数据库检查,每次只需要同步新修改的部分或者增加的部分,删除的部分本地也会删除,默认是同步增、删、改

如果勾选只新增,那么同步时只会增加新内容,不会对修改和删除的老数据做任何操作,默认是不勾选的。

因为我们的数据库常规新产生的数据其实并不大,每一秒产生的数据也不会很多,原则上每一秒新产生的数据在800条一下,SyncNavigator基本同步没有任何压力,也不会对服务器产生任何负担和压力。

他的同步方式可以实时,也可以定时,更能根据客户设置按此执行,可以设置开始日期和停止日期,后台自动执行,不需要开软件,默认以服务的形式跟随计算机同步启动,只需要设置的时候打开客户端设置就好。

当你联系客服人员购买软件,激活之后的界面是这样的:


那么作为新手,怎么熟悉,并使用软件呢?

下面主要从同步管理、总控制台、查看日志三个点作为切入,新手掌握这三个地方就能基本熟悉软件操作,其他细节再自己摸索就行。

刚安装激活软件,打开客户端之后,桌面会有一个客户端和服务端,客户端是我们用来操作基本参数,设置的界面,服务端是后台自动运行的程序,服务端随电脑系统自动启动,断点续传,增量同步数据,是一个后台程序,我们不用管他,我们平时设置的时候只需要打开客户端,然后配置好基本参数退出就好,服务端会默默帮我们后台干活,设置好之后客户端可以关闭。

双击打开客户单,他会提示登录,这里登录的不是数据库,这里登录的是后台服务端,所以这里默认是什么都不需要填写的,如果是本机安装的,直接点连接,无需写入账号密码!

如果是第一次安装后打开本软件,他会提示服务端没有启动,需要启动,点“是”即可,以后打开的话不会出现下面这个界面。

那么这样就进入到我们的软件界面了,刚开始的时候我们需要设置同步项目,点击“同步管理”,然后点击“新建”,本程序支持项目导出导入,也就是说如果很多服务器同步参数一样,我们可以导出项目,在其他服务器上导入,然后做简单修改,比如修改数据库地址就好然后就能直接开始同步任务。

那么下面这个新建界面就是我们主要设置参数的地方了,其中有三个:来源数据库、目标数据库、同步内容设置以及计划调度设置比较重要,需要填写,其他的模式下熟悉一下就好。

来源数据库:源数据库,也就是数据来源。目标数据库,也就是数据需要传输到哪里,目标数据库可以是空数据库,如果为空,程序第一次会自动创建目标数据库表结构。不过建议不让程序自动创建,如果来源数据库结构和目标数据库结构一致,可以将来源数据库结构导出一份到目标数据库。

填写好来源数据库地址,账号,密码后点击连接测试,如果能够连接会提示“成功”,如果数据库端口不是默认端口,如sqlserver数据库端口为14333,那么在数据库IP后加上新端口。

连接测试成功后,点击读取按钮,就会读取数据库中的数据库列表,选择所需的来源数据库即可。

SyncNavigator 做数据同步时所支持的数据库类型:

支持sqlserver 2000-2014所有版本,全兼容,和MYsql 4.x 、MYsql 5.x 、MYsql 6.x版本。

来源数据库和目标数据库可以版本不同,比如:来源数据库是sqlserver 2012  目标数据库是mysql 5.5 ,都是可以的, SyncNavigator 支持跨数据库版本,无缝传输数据。

只需要能连接上数据库, SyncNavigator 可以安装在第三方电脑上,来源数据库和目标数据库电脑上可以不用安装程序。

目的数据库设置和来源数据库设置一样,填写账号密码测试,然后选择。同步参数设置那里不做过多说明,一般不管他就好。

同步内容那里会列举出来源数据库下面所有的表,然后通过右键可以全选或者可以单个勾选所需要同步的表。

选中某一个表点右上角详细设置或者双击它,我们可以对这个表的同步方式进行精细化操作,其中可以指定同步到目的表,也就是说这个表需要同步到哪个具体表中,允许表明不同,也可以指定字段,在目标名称那里填写。默认不做修改的话他是勾选保持原有结构的,在这个情况下目标名称和来源表名称一样,字段的目标名称为空就是说明和来源一直,也就是同种结构的表了。

以上就是异构数据具体设置的地方,需要修改表名称和字段匹配。同步条件那里基本可以理解成where后的参数,比如可以写 a > 100 ,就会过滤table_1这个表中字段小于100的数据。

另外字段可以勾选,不勾选的字段不会同步。

使用多来源默认是不勾选的,如果多个表数据进入到某一个表中,或者多个表中的不同字段进入到一个目标表中,可以勾选多来源.

勾选只新增的话就不会同步删除或者修改的数据,默认不勾选的,增删改默认会同步。

 

计划调度那里设置程序运行频率和方式,如果需要实时同步就设置自动模式就好。也可以按次数,按周期执行。

都设置好之后点开总控制台开始程序,后台就开始同步了。

点开详细,就能看到每个表的同步状况。如果有同步失败的表,点开右上角红色“查看问题”按钮,具体查看为什么失败,针对性的调整。

在上一部分《深入数据库同步技术(2)- 时序性保障”》中,我们为大家介绍了数据同步时序性的概念和重要意义,以及在da-syncer中如何利用Oracle闪回版本查询实现时序性。在这一部分,我们将为大家介绍我们自研的同步工具da-syncer。

深入数据库同步技术(3)-da-syncer介绍
一、da-syncer实现了哪些功能
da-syncer是我们数据聚合项目中的一个数据同步工具,可以通过简单地点击鼠标完成表数据同步的工作,它包含了两个代码工程:mconsole:提供管理控制台,前后端分离,是一个常规的Spring Boot工程pyworker:Worker进程,核心同步引擎,使用Python完成

 

首先抱歉在这里澄清一下,在本系列文章的“深入数据库同步技术(1)- 基础篇”中,我们基于Java/JDBC视角做了很多用例说明,因为毕竟Java是主流编程语言,用它来做说明大家普遍更能接受一些。但实际上我们的核心同步引擎是Python做的。

至于为什么选择Python,主要原因是Java的笨重。Python是敏捷型语言,更轻量级,在短时间内能更快速地交付项目,且大大缩减我们的代码量(注:本人无意挑起语言层面孰优孰劣的无谓争论)。

比如像pyworker工程里面大量存在的Python Style的语句(见图1):

深入数据库同步技术(3)-da-syncer介绍
图1:简洁的Python代码
写起来很简洁,如果换成Java实现的话,可能每一句都会拆解成十几条甚至几十条子句。目前pyworker的所有代码加起来还不到100K。另外,Python有众所周知的GIL锁的问题,pyworker没有使用多进程而是使用多线程,主要是因为数据同步本身是一个典型的网络I/O密集型而非CPU密集型的业务场景,所以其实影响还是比较小的。 

简单总结一下,目前da-syncer支持的功能点包括:

(1)实现了Oracle到Oracle/MySQL,或者MySQL到Oracle/MySQL的全量和增量同步

(2)支持数字,字符,日期,二进制等常用字段类型

(3)自动化创建目的表后完成全量同步,对于有单一主键的大表,还支持大表分段同步

(4)可以在运行时自由切换以源表或目的表的表结构作为模板,完成同步

(5)可选择last_modified_date、ora_rowscn、greatest函数索引等多种增量同步策略

(6)支持数据比对,以解决源端有物理删除记录的情况

(7)提供管理控制台界面,让用户可以方便地注册数据源,管理同步任务,获悉同步内部详细信息,对同步参数进行管理等

(8)当同步任务失败或遇到异常时,提供告警功能,通过邮件通知管理员

(9)当同步出现错误时,将同步错误记录保存到单独的一张表,并在错误修复后,自动重试。比如,源端增加了字段长度,目的端感知不到,在源端插入一个长数据后,目的端不能插入,这种错误会被记录下来,在人工干预加长目的端字段长度后,同步恢复正常

(10)在部署环境中,经常会遇到网络拥塞、抖动,以及各种中间件不稳定的情况,使用类似指数退避算法,重试直至成功为止

(11)支持websocket信息推送,可以在管理控制台看到实时同步日志流

(12)对于Oracle源,支持去重机制。如果只增量同步不选择全局同步机制,因为ora_rowscn默认基于Oracle数据块,这样大量无效数据被同步,可以开启去重,将真正发生改变的记录同步到目的端

(13)对于Oracle同步源,得益于闪回版本查询,我们实现了:

????同步时序性

????通过全局同步机制,只检索发生实际改变的记录版本,相比单纯使用ora_rowscn机制,大大减少检索、网络传输量(减少到万分之一),缩短同步时间(几个小时到几分钟)

????自动检测Delete操作,并在目的表同步删除

????可以开启每个分段内的版本记录功能,写入单独的表,消费该表可实现DataBus数据总线功能(如数据发布、数据订阅、数据通知)

(14)支持同步拦截、预处理机制

可以在运行时登记Python脚本,在数据记录被插入或更新到目的表之前,进行一些预处理,比如修改记录某个/些字段的值、或合并两个字段值到另外一个字段等。

(15)支持数据脱敏

可以在运行时登记Python脚本,在同步时完成数据脱敏的工作,如将身份证或手机号等敏感信息替换成*等。

 

总起来说,我们不是每样功能都做,需要提供什么功能完全是业务需求驱动的。

 

未来可能支持的功能点包括:

(1)目的表Sharding

针对源表是巨型表的情况,可以提供分区策略,自动进行目的表的Sharding分区,这样可以将源表分散到多张目的表中,提高上层查询、聚合效率。

备注:一些大表已经到了4亿级别的量,靠使用InnoDB存储引擎的单表加上索引很难再满足应用层的查询性能要求,必须要考虑分表了。

 

(2)支持其他NoSQL作为同步源或目的端

比如支持从MongoDB中读取数据,保存到数据库;或从数据库读取数据,保存到MongoDB。

备注:一些业务方系统由于自身业务需要,开始尝试使用Schema Free的数据库,比如MongoDB,对于da-syncer也需要同步跟上。

 

(3)弃用Otter/Canal框架

使用Otter/Canal框架的原因是它帮助我们解决了MySQL源的同步时序性问题,同时不用在源表强制添加last_modified_date字段,但这样会造成我们维护两套技术体系,一个是基于Java的Otter/Canal(说实话Otter这个东西并不好用,它把全量和增量同步硬生生地割裂开来,配置复杂、选项多,但很多都用不了,也用不上。每次麻烦DBA帮忙配置线上的Otter同步任务时,都像要杀了他似的),一个是基于Python的da-syncer。

未来,我们在pyworker中可能会集成pymysqlreplication模块,由pyworker自身解析binlog文件,以实现MySQL源的时序性。

这样一来,无论是Oracle源还是MySQL源,时序性就可以在pyworker中统一实现了。

二、da-syncer 管理控制台展示
下面,我们从da-syncer管理控制台mconsole中挑选了两个界面,给大家介绍一下:(1)添加新同步任务图1是添加一个新的同步任务时的界面。

深入数据库同步技术(3)-da-syncer介绍
图1:添加一个新同步任务
a) 搜索并选择一个源库b) 选定一个源库后,库里面的所有表名、表大致记录数、表上的comment备注就会显示在源表下拉框中,搜索并选定一个源表c) 选择同步策略

d) 选择目的库

e) 输入目的表表名,点击“生成建表SQL”,可以干预生成的建表SQL,如添加额外索引

f) created_at和updated_at字段是自动生成并添加在目的表的两个元字段,作用是为了方便上层应用做增量聚合查询

g) 确定各种参数和开关,点击确定按钮即可开始全量同步

(2)查看实时同步日志

通过websocket将pyworker产生的实时日志输出推送到客户浏览器端,方便了解同步任务内部状态、所处阶段、相应步骤及其耗时等(见图2)。

深入数据库同步技术(3)-da-syncer介绍
图2:websocket实时推送
a) 可以输入关键字在推送的信息中进行简单搜索(结果highlight显示)b) 可以复制信息到其他地方,比如记事本c) 可以暂停信息滚动

d) 服务器端实现信息暂存(只保留最近的2000条)

 

关于da-syncer就到这里,我们的计划是未来将da-syncer开源,以方便那些跟我们在数据同步领域有相同痛点的同行们。

“深入数据库同步技术”系列3个部分至此全部介绍完毕,限于篇幅关系且本人能力有限,很多细节讲的不是很到位,如果有什么问题,欢迎大家沟通交流!

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

syncnavigator 8.4.1 企业版

联系我们联系我们
 
QQ在线咨询
售前咨询热线
QQ1793040