同步数据的方法、装置、数据传输组件及系统的制作方法_3

文档序号:8380803阅读:来源:国知局
71] 此外,本发明实施例还提供了监控数据同步的方案,可以实现断点续传和故障恢 复等功能。即在从数据库根据多个同步任务实现与主数据库间的数据同步的过程中,从数 据库记录自身同步的执行位置信息,得到同步日志。此时,数据传输组件监控从数据库的数 据同步的状态,若监控到从数据库的数据同步发生中断,则获取从数据库的同步日志,并读 取从数据库的同步日志中从数据库同步的执行位置信息,从而根据从数据库同步的执行位 置信息恢复数据同步。这里,从数据库的数据同步发生中断可能有多种因素,如硬盘出现故 障、操作系统崩溃、从服务器断电等等。进一步地,从数据库的同步日志被上传至云服务器, 此时可以从该从数据库或云服务器获取从数据库的同步日志,这样可以预防从服务器挂机 或从数据库的数据丢失等故障。
[0072] 相关技术中,主从数据库之间进行同步数据遵循一主多从的架构,采用本发明提 供的数据传输组件,可以实现多主多从的架构,可以节省硬件资源。另外,本发明实施例中 主数据库或从数据库可以为MySQL数据库。如前所述,当主数据库的写入、更新、删除等操 作较多时,尤其是主数据库在大量业务的触发下,对从数据库同步时会产生大量写入需求, 但是MySQL从数据库同步的时候却只有一个线程在按照binary log的记录顺序在回放并 进行写入操作,单线程对数据的处理速度有限,超过其处理速度的数据需进行排队等待,若 在存在数据排队的过程仍有大量数据写入,则会进一步增加排队时长。此外,MySQL5. 6及以 上的版本支持多线程复制,这种技术的原理是基于database (数据库),为每一个database 启动一个同步的线程,然后进行多线程的数据同步。然而,基于database的方案,只有在 整个服务有多个database的时候才有效,当单个database的时候不能解决问题,而多个 database在业务逻辑上将对数据库的使用带来很大的制约。如果已经存在的服务只有单个 database,那么在拆分成多个database时需要很大的成本,不仅给数据库维护人员带来额 外的工作,而且对于数据库的使用人员也需要修改相应的业务逻辑。本发明提供的技术方 案能够解决MySQL各主流版本单线程同步造成同步延时的问题,支持主流的MySQL版本,支 持单个或多个database的数据同步。本发明可以根据实际情况调用自定义个数的线程来 做主从数据库的同步,不受自身版本和database个数的限制。
[0073] 需要说明的是,实际应用中,上述所有可选实施方式可以采用结合的方式任意组 合,形成本发明的可选实施例,在此不再一一赘述。
[0074] 对应上述实施例中的同步数据的方法,本发明实施例还提供了一种同步数据的装 置,应用于具有主从结构的数据库,图2示出了根据本发明一个实施例的同步数据的装置 的结构示意图。参见图2,该装置至少包括:获取器210、生成器220、分配器230以及发送 器 240。
[0075] 现介绍本发明实施例的同步数据的装置的各组成或器件的功能以及各部分间的 连接关系:
[0076] 获取器210,适于从主数据库获取待同步数据;
[0077] 生成器220,与获取器210相耦合,适于根据获取的待同步数据生成多个同步任 务;
[0078] 分配器230,与生成器220相耦合,适于调用至少两个并发的线程,根据预设规则 分配多个同步任务至所述的至少两个并发的线程中;
[0079] 发送器240,与分配器230相耦合,适于利用至少两个并发的线程,发送多个同步 任务至从数据库,以供从数据库根据多个同步任务实现与主数据库间的数据同步。
[0080] 在本发明的一个实施例中,上述图2展示的同步数据的装置可以配置于主数据库 与待同步的从数据库之间。
[0081] 在本发明的一个实施例中,上述分配器230还适于:根据多个同步任务中的对象 标识分配多个同步任务,将具备相同对象标识的同步任务分配至同一个线程中;或者根据 多个同步任务中的数据表标识分配多个同步任务,将具备相同数据表标识的同步任务分配 至同一个线程中。
[0082] 在本发明的一个实施例中,上述分配器230还适于:将具备相同对象标识的同步 任务按照时序或排序顺序分配至同一个线程中。
[0083] 在本发明的另一个实施例中,上述分配器230还适于:将具备相同数据表标识的 同步任务按照时序或排序顺序分配至同一个线程中。
[0084] 在本发明的一个实施例中,上述分配器230还适于:根据多个同步任务的数量,调 用相应数量的并发的线程;将多个同步任务一对一的分配至相应数量的并发的线程中。
[0085] 在本发明的一个实施例中,在发送器240利用至少两个并发的线程,发送多个同 步任务至从数据库的过程中,若从主数据库获取到新的待同步数据,则生成器220根据新 的待同步数据生成新的多个同步任务。
[0086] 在本发明的一个实施例中,生成器220根据新的待同步数据生成新的多个同步任 务之后,上述分配器230还适于:根据预设规则分配新的多个同步任务至所述的至少两个 并发的线程中;或者调用新的线程,并根据预设规则分配新的多个同步任务至新的线程中, 以利用新的线程发送新的多个同步任务至从数据库。
[0087] 在本发明的一个实施例中,在从数据库根据多个同步任务实现与主数据库间的数 据同步的过程中,从数据库记录自身同步的执行位置信息,以得到同步日志。
[0088] 在本发明的一个实施例中,图3示出了根据本发明另一个实施例的同步数据的装 置的结构示意图。参见图3,该装置还可以包括:
[0089] 监控器310,与发送器240相耦合,适于监控从数据库的数据同步的状态;
[0090] 执行器320,与监控器310相耦合,适于若监控到从数据库的数据同步发生中断, 则获取从数据库的同步日志,并读取从数据库的同步日志中从数据库同步的执行位置信 息;根据从数据库同步的执行位置信息恢复数据同步。
[0091] 在本发明的一个实施例中,上述执行器320还适于:从所述从数据库获取从数据 库的同步日志。
[0092] 在本发明的一个实施例中,从数据库的同步日志被上传至云服务器,上述执行器 320还适于:从所述从数据库或云服务器获取从数据库的同步日志。
[0093] 在本发明的一个实施例中,上述获取器210还适于:以指定的时间周期获取主数 据库的日志文件;解析主数据库的日志文件,得到待同步数据。
[0094] 在本发明的一个实施例中,上述获取器210还适于:若初次解析主数据库的日志 文件,则从主数据库的日志文件的初始位置开始解析,得到待同步数据;若非初次解析主数 据库的日志文件,则获取上一次解析主数据库的日志文件的解析位置,并从解析位置开始 解析,得到待同步数据。
[0095] 在本发明的一个实施例中,待同步数据的格式为JSON格式。
[0096] 在本发明的一个实施例中,主数据库的数量为至少一个。
[0097] 在本发明的一个实施例中,主数据库或从数据库为MySQL数据库。
[0098] 相应的,本发明还提供一种同步数据的数据传输组件,其包括上述实施例中所述 的任一同步数据的装置。
[0099] 基于上文各实施例提供的同步数据的方法、装置和数据传输组件,基于同一发明 构思,本发明实施例还提供了一种同步数据的系统,参见图4所示,该系统至少可以包括: 上文介绍的主数据库410、数据传输组件420以及从数据库430。
[0100] 下面通过具体实施例详细介绍本发明利用数据传输组件实现同步数据的方案,在 本实施例中,数据传输组件从主数据库获取待同步数据,并根据待同步数据生成多个同步 任务。图5示出了根据本发明另一个实施例的同步数据的系统的结构示意图。如图5所示, 在实施本发明提供的技术方案时,可以关闭现有的主数据库410和从数据库430单线程同 步的接口,由数据传输组件420从主数据库410获取待同步数据,并根据待同步数据生成多 个同步任务(如10个同步任务,其详细信息如下表1所示)。
[0101] 表 1
[0102] 同步任务I数据表标识I对象标识 I数据操作 1 Di 对象a Wa 2 Dl 对象A 3 Dl 对象B Wa 4 Dl 对象A β 5 D2 对象C Wa 6 D2 对象C 7 Dl 对象B 8 D3 对象D Wa 9 D3 对象D 10 D3 对象 D
[0103] 此时,可以根据前文所述的方式一、方式二或方式三调用至少两个并发的线程,并 分配同步任务至所述的至少两个并发的线程中。例如,根据表1所示,可以调用三个线程, 分别为线程1、2和3,将同步任务1、2、3、4以及7按照时序或排序顺序分配至线程1中,将同 步任务5和6按照时序或排序顺序分配至线程2中,以及将同步任务8、9和10按照时序或 排序顺序分配至线程3中,从而利用线程1、2和3同步发送10个同步任务至从数据库430, 以供从数据库430根据10个同步任务实现与主数据库410间的数据同步。又如,根据对象 标识进行分配,可以调用四个线程,分别为线程1、2、3和4,将同步任务1、2及4按照时序或 排序顺序分配至线程1中,将同步任务3和7按照时序或排序顺序分配至线程2中,将同步 任务5和6按照时序或排序顺序分配至线程3中,以及将同步任务8、9和10按照时序或排 序顺序分配至线程4中,从而利用线程1、2、3和4同步发送10个同步任务至从数据库430, 以供从数据库430根据10个同步任务实现与主数据库410间的数据同步。需要说明的是, 此处同步任务的个数、线程的个数以及数据操作类型仅是示意性的,在实际应用中,同步任 务可能是上千个、上万个甚至百万个,可以根据同步任务的个数合理调用线程进行分配。
[0104]
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1