一种数据同步方法及系统技术方案

技术编号:19352739 阅读:41 留言:0更新日期:2018-11-07 17:42
本发明专利技术公开了一种数据同步方法及系统,其中方法包括:利用公用组件监听数据库的操作日志,进而对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;最后将生成的所述数据变更消息投递到消息队列中,进行存储。本发明专利技术利用时间信息和周期更新的递增序列来维护一个递增的版本号,从而保证同一条记录的多个操作的版本号是递增的,实现数据同步的一致性。

【技术实现步骤摘要】
一种数据同步方法及系统
本专利技术涉及计算机
,尤其涉及一种数据同步方法及系统。
技术介绍
计算机系统中,传统的数据同步方法主要有以下两种:一种是通过定时任务以及数据库的update_time字段定时把最近时段的更新数据同步到指定存储中。这种方式的数据同步在分钟级,实时性较差。另一种是通过接受数据库的binlog,将每条数据直接写入到目标存储。这种方式数据写入性能太差,因为每一个mysql(关系型数据库管理系统)实例,仅有一个消费程序,如果一条记录写入需要50ms,那么一秒钟最多只能写入20条数据。对于mysql数据,一秒钟大于20条更新,那么消费方的数据就会慢慢延迟。而实际在大部分应运场景下,1秒钟更新条数都是远远大于20条的。采用多线程可以提升数据写入性能,但是多线程同时又会带来数据并发,导致数据不一致的问题。比如两个线程同时写入同一条记录的两次更新,虽然产生的时候有先后顺序,但是在写入的时候,经常会出现后产生的数据先写入目标存储,导致数据与mysql的数据不一致。
技术实现思路
基于此,本专利技术提供了一种数据同步方法及系统,该专利技术能够解决数据快速消费情况下,使得更新的数据与数据库中的数据保持一致,不需要后续频繁的数据订单操作。本专利技术提供的一种数据同步方法,包括以下步骤:利用公用组件监听数据库的操作日志;对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;将生成的所述数据变更消息投递到消息队列中,进行存储。作为一种可实施方式,所述利用公用组件监听数据库的操作日志,包括:利用公用组件监听mysql的binlog。作为一种可实施方式,所述公用组件为canal。作为一种可实施方式,所述对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息,包括以下步骤:获取当前的系统时间戳,并生成当前操作日志的序列号;根据所述时间戳和所述序列号,生成所述版本号;将所述版本号添加至所述操作日志,生成数据变更消息。作为一种可实施方式,根据所述时间戳和所述序列号,生成所述版本号,包括以下步骤:将所述时间戳放在高位,将所述序列号放在低位,生成所述版本号。相应地,本专利技术提供了一种数据同步系统,包括监听模块、处理模块以及投递模块;所述监听模块,用于利用公用组件监听数据库的操作日志;所述处理模块,用于对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;所述投递模块,用于将生成的所述数据变更消息投递到消息队列中,进行存储。作为一种可实施方式,所述监听模块包括监听单元;所述监听单元,用于利用公用组件监听mysql的binlog。作为一种可实施方式,所述公用组件为canal。作为一种可实施方式,所述处理模块包括获取单元、生成单元以及添加单元;所述获取单元,用于获取当前的系统时间戳,并生成当前操作日志的序列号;所述生成单元,用于根据所述时间戳和所述序列号,生成所述版本号;所述添加单元,用于将所述版本号添加至所述操作日志,生成数据变更消息。作为一种可实施方式,所述生成单元还用于将所述时间戳放在高位,将所述序列号放在低位,生成所述版本号。与现有技术相比,本技术方案具有以下优点:本专利技术利用公用组件监听数据库的操作日志,进而对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;最后将生成的所述数据变更消息投递到消息队列中,进行存储。其利用时间信息和周期更新的递增序列来维护一个递增的版本号,从而保证同一条记录的多个操作的版本号是递增的,实现数据同步的一致性。附图说明图1为本专利技术实施例一提供的数据同步方法的流程示意图;图2为本专利技术实施例二提供的数据同步系统的结构示意图。具体实施方式以下结合附图,对本专利技术上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术的部分实施例,而不是全部实施例。参见图1,本专利技术实施例一提供了一种数据同步方法,包括以下步骤:S100、利用公用组件监听数据库的操作日志。利用公用组件监听数据库的操作日志,然后将其消息投递到消息队列中,具体的实现可以使用rabbitMQ、kafka、nsq等消息中间件。作为一种可实施方式,可以通过canal监听mysql的binlog,canal也可以拉取其他数据库的操作日志,整个canal可以重新实现。S200、对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;生成的数据变更消息的格式包括:更改类型、记录更新版本号、更改之前的数据以及更改之后的数据等。继续以canal监听mysql的binlog的实施方式为例,canal可以通过解析Mysql的binlog,构造数据包,该数据包包含以下信息:记录更新版本号、更新前的记录、更新后的记录、操作类型(分为新增、修改、删除)、表名(变更记录所属的数据库表名)、库名(变更记录所属的数据库库名)。S300、将生成的所述数据变更消息投递到消息队列中,进行存储。在写入特定存储的时候,特定存储的版本号字段,比如HBase的timestamp,ElasticSearch的version。由于这个版本号有个特性,就是对于当前的写入数据,只有版本号大于当前已存记录的版本号的时候,才能成功写入,否则就会忽略或者报版本冲突错误。因此,经过步骤S200生成的所述数据变更消息写入的时候,完全可以直接并发写入,不需要额外的判断,不需要担心数据不一致。需要说明的是,投递消息格式还可以在本实施例的格式的基础上,再增加其他个性化字段。目标存储可以为任意支持版本号的存储,例如elasticsearch,mysql(显示的version字段)等。本专利技术利用公用组件监听数据库的操作日志,进而对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;最后将生成的所述数据变更消息投递到消息队列中,进行存储。其利用时间信息和周期更新的递增序列来维护一个递增的版本号,从而保证同一条记录的多个操作的版本号是递增的,实现数据同步的一致性。作为一种可实施方式,步骤S200中,对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息,包括以下步骤:S210、获取当前的系统时间戳,并生成当前操作日志的序列号;S220、根据所述时间戳和所述序列号,生成所述版本号;S230、将所述版本号添加至所述操作日志,生成数据变更消息。上述步骤S220中,根据所述时间戳和所述序列号,生成所述版本号,可以将时间戳放在高位,将所述序列号放在低位,生成所述版本号;也可以将时间戳放在低位,将所述序列号放在高位,生成所述版本号。例如,将时间戳放在高32位,将所述序列号放在低32位,即可生成64位版本号。下面,列举一具体的生成所述版本号的算法:版本号构成:unixtimestamp(秒)(32位)+memorycounter(31位),总共63位,可以用一个bigint整型表示·unix_timestamp:取当前系统时间;·memory_counter:初始化为1,每生产一条消息就加1;·memory_counter重置时机;每隔特定时间,例如5秒;当memory_counter值超过2**31时;·memory_counter重置操作;memorycounter=本文档来自技高网...

【技术保护点】
1.一种数据同步方法,其特征在于,包括以下步骤:利用公用组件监听数据库的操作日志;对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;将生成的所述数据变更消息投递到消息队列中,进行存储。

【技术特征摘要】
1.一种数据同步方法,其特征在于,包括以下步骤:利用公用组件监听数据库的操作日志;对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息;将生成的所述数据变更消息投递到消息队列中,进行存储。2.根据权利要求1所述的数据同步方法,其特征在于,所述利用公用组件监听数据库的操作日志,包括:利用公用组件监听mysql的binlog。3.根据权利要求1或2所述的数据同步方法,其特征在于,所述公用组件为canal。4.根据权利要求1或2所述的数据同步方法,其特征在于,所述对监听到的操作日志增加包含时间信息和序列信息的版本号,以生成数据变更消息,包括以下步骤:获取当前的系统时间戳,并生成当前操作日志的序列号;根据所述时间戳和所述序列号,生成所述版本号;将所述版本号添加至所述操作日志,生成数据变更消息。5.根据权利要求4所述的数据同步方法,其特征在于,根据所述时间戳和所述序列号,生成所述版本号,包括以下步骤:将所述时间戳放在高位,将所述序列号放在低位,生成所述版本号。6.一种数据同步系统,其...

【专利技术属性】
技术研发人员:袁奎
申请(专利权)人:杭州有赞科技有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1