数据同步方法及装置制造方法及图纸

技术编号:14891616 阅读:49 留言:0更新日期:2017-03-29 00:26
本发明专利技术公开了一种数据同步方法及装置,涉及计算机网络技术领域。其中方法包括:从源数据库中读取数据;将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本发明专利技术中,多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。

【技术实现步骤摘要】

本专利技术涉及计算机网络
,具体涉及一种数据同步方法及装置
技术介绍
基于分布式文件存储的数据库,一般由特定语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。由于单一数据库的处理能力有限,因此在分布式文件存储数据库的解决方案中,基于源数据库,按照业务或功能建立多个目标数据库,从而降低对源数据库的访问压力。当源数据库中的某个数据表发生变化时,需要保证关注该数据表的目标数据库中的该数据表与源数据库中的该数据表发生一致的变化,因此需要一个同步装置来实现目标数据库与源数据库之间数据的同步。现有的同步装置所采取的同步方法是,从源数据库读取一条数据,向目的数据库写入该条数据之后,再从源数据库读取下一条数据,继续写入,直至所有数据同步完成。由于数据写入的速度远低于数据读取的速度,现有的同步方法中数据写入占用的时间过长,影响了数据同步效率。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的数据同步方法及装置。根据本专利技术的一个方面,提供了一种数据同步方法,其包括:从源数据库中读取数据;将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。根据本专利技术的另一方面,提供了一种数据同步装置,其包括:数据读取模块,适于从源数据库中读取数据;打包模块,适于将读取的数据打包成数据块;保存模块,适于将数据块保存到数据块池中;通知模块,适于向多个线程处理模块发送广播通知;多个线程处理模块,其中处于空闲状态的线程处理模块适于:从数据块池中读取数据块,并将数据块写入目的数据库。根据本专利技术提供的数据同步方法及装置,从源数据库中读取数据,将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本专利技术提供的方案不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程执行将数据块写入目的数据库的操作,多个线程并行运行,一个线程从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本专利技术一个实施例的数据同步方法的流程示意图;图2示出了根据本专利技术另一个实施例的数据同步方法的流程示意图;图3示出了根据本专利技术一个实施例的数据同步装置的功能框图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。为了能提升数据同步效率,本专利技术实施例提供了一种数据同步方法,该方法为一种第三方解决方案,即通过开发的第三方工具实现将源数据库的数据同步给目的数据库。举例来说,通过中间件实现本专利技术实施例的方法,中间件与源数据库之间建立用于读取数据的连接,中间件与目的数据库之间建立用于写入数据的连接。中间件执行如下实施例提供的方法,能够提升源数据库和目的数据库之间的数据同步效率。由于利用了中间件,源数据库和目的数据库之间并未直接建立连接,不会改变分布式系统中数据库之间的连接关系,因而不会触发因新建连接而导致的主数据库选举机制,也就不会引起因主数据块选举机制导致的数据库性能受影响的问题。图1示出了根据本专利技术一个实施例的数据同步方法的流程示意图。如图1所示,该方法包括如下步骤:步骤S101,从源数据库中读取数据。首先,中间件预先与源数据库建立用于读取数据的至少一条连接。基于数据写入的速度远低于数据读取的速度的现状,中间件与源数据库之间建立一条用于读取数据的连接,即可满足中间件的处理需求。利用所建立的连接,中间件从源数据库中读取数据。具体地,源数据库开设一数据读取端口,中间件访问该数据读取端口读取一条条数据。步骤S102,将读取的数据打包成数据块。中间件从源数据库中读取一条条数据,每条数据的数据量比较小。为了增强处理性能,中间件将读取的数据打包成数据块,每个数据块包含若干条数据。数据块具有预设块大小,该预设块大小可根据经验来设定,本专利技术对此不作限制。步骤S103,将数据块保存到数据块池中,并向多个线程发送广播通知。中间件内部预先建立了数据块池,并创建了多个线程,每个线程与目的数据库之间建立有一条用于写入数据的连接。中间件将数据块保存到数据块池中,并向多个线程发送广播通知,以通知各个线程有新的数据块需要写入。步骤S104,接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。接收到广播通知的线程根据自身的工作状态选择是否读取数据块。为了提高处理速度,本专利技术要求空闲的线程才可从数据块池中读取数据块。如果在发送广播通知后,当前中间件内没有空闲的线程,则数据块暂存于数据块池中,等待中间件内有线程空闲后,再从数据块池中读取一个数据块,读取成功后执行将数据块写入目的数据库的操作。利用本实施例提供的数据同步方法,从源数据库中读取数据,将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本实施例提供的方法不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程执行将数据块写入目的数据库的操作,多个线程并行运行,一个线程从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。图2示出了根据本专利技术另一个实施例的数据同步方法的流程示意图。如图2所示,该方法包括如下步骤:步骤S201,与源数据库建立用于读取数据的至少一条连接,以及创建多个线程,且每个线程与目的数据库建立一条用于写入数据的连接。中间件预先与源数据库建立用于读取数据的至少一条连接。基于数据写入的速度远低于数据读取的速度的现状,中间件与源数据库之间建立一条用于读取数据的连接,即可满足中间件的处理需求。如果一条连接不能满足需求,例如数据写入的速度高于数据读取本文档来自技高网...
数据同步方法及装置

【技术保护点】
一种数据同步方法,其包括:从源数据库中读取数据;将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。

【技术特征摘要】
1.一种数据同步方法,其包括:从源数据库中读取数据;将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。2.根据权利要求1所述的方法,其中,在从源数据库中读取数据之前,所述方法还包括:与源数据库建立用于读取数据的至少一条连接,以及创建所述多个线程,且每个线程与目的数据库建立一条用于写入数据的连接。3.根据权利要求1所述的方法,其中,所述将读取的数据打包成数据块进一步包括:按照预设块大小,将读取的数据打包成数据块。4.根据权利要求1所述的方法,其中,在所述向多个线程发送广播通知之后,所述方法还包括:设置用于锁定数据块读取操作的锁;所述多个线程判断自身是否处于空闲状态,若是,则发起抢锁请求;所述接收到广播通知的空闲线程从数据块池中读取数据块具体为:抢锁成功的空闲线程从数据块池中读取数据块。5.根据权利要求4所述的方法,其中,在抢锁成功的空闲线程从数据块池中成功读取一个数据块之后,所述方法还包括:抢锁成功的空闲线程释放锁。6.根据权利要求1或4所述的方法,...

【专利技术属性】
技术研发人员:吴晓飞宋昭
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京;11

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

1