CN106528893B - 数据同步方法及装置 - Google Patents
数据同步方法及装置 Download PDFInfo
- Publication number
- CN106528893B CN106528893B CN201611219560.1A CN201611219560A CN106528893B CN 106528893 B CN106528893 B CN 106528893B CN 201611219560 A CN201611219560 A CN 201611219560A CN 106528893 B CN106528893 B CN 106528893B
- Authority
- CN
- China
- Prior art keywords
- data
- data block
- reading
- lock
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/2871—Implementation details of single intermediate entities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Abstract
本发明公开了一种数据同步方法及装置,涉及计算机网络技术领域。其中方法包括:从源数据库中读取数据;将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本发明中,多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。
Description
技术领域
本发明涉及计算机网络技术领域,具体涉及一种数据同步方法及装置。
背景技术
基于分布式文件存储的数据库,一般由特定语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。由于单一数据库的处理能力有限,因此在分布式文件存储数据库的解决方案中,基于源数据库,按照业务或功能建立多个目标数据库,从而降低对源数据库的访问压力。当源数据库中的某个数据表发生变化时,需要保证关注该数据表的目标数据库中的该数据表与源数据库中的该数据表发生一致的变化,因此需要一个同步装置来实现目标数据库与源数据库之间数据的同步。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据同步方法及装置。
根据本发明的一个方面,提供了一种数据同步方法,其包括:
从源数据库中读取数据;
将读取的数据打包成数据块;
将数据块保存到数据块池中,并向多个线程发送广播通知;
接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。
根据本发明的另一方面,提供了一种数据同步装置,其包括:
数据读取模块,适于从源数据库中读取数据;
打包模块,适于将读取的数据打包成数据块;
保存模块,适于将数据块保存到数据块池中;
通知模块,适于向多个线程处理模块发送广播通知;
多个线程处理模块,其中处于空闲状态的线程处理模块适于:从数据块池中读取数据块,并将数据块写入目的数据库。
根据本发明提供的数据同步方法及装置,从源数据库中读取数据,将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本发明提供的方案不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程执行将数据块写入目的数据库的操作,多个线程并行运行,一个线程从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据同步方法的流程示意图;
图2示出了根据本发明另一个实施例的数据同步方法的流程示意图;
图3示出了根据本发明一个实施例的数据同步装置的功能框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了能提升数据同步效率,本发明实施例提供了一种数据同步方法,该方法为一种第三方解决方案,即通过开发的第三方工具实现将源数据库的数据同步给目的数据库。举例来说,通过中间件实现本发明实施例的方法,中间件与源数据库之间建立用于读取数据的连接,中间件与目的数据库之间建立用于写入数据的连接。中间件执行如下实施例提供的方法,能够提升源数据库和目的数据库之间的数据同步效率。由于利用了中间件,源数据库和目的数据库之间并未直接建立连接,不会改变分布式系统中数据库之间的连接关系,因而不会触发因新建连接而导致的主数据库选举机制,也就不会引起因主数据块选举机制导致的数据库性能受影响的问题。
图1示出了根据本发明一个实施例的数据同步方法的流程示意图。如图 1所示,该方法包括如下步骤:
步骤S101,从源数据库中读取数据。
首先,中间件预先与源数据库建立用于读取数据的至少一条连接。基于数据写入的速度远低于数据读取的速度的现状,中间件与源数据库之间建立一条用于读取数据的连接,即可满足中间件的处理需求。利用所建立的连接,中间件从源数据库中读取数据。具体地,源数据库开设一数据读取端口,中间件访问该数据读取端口读取一条条数据。
步骤S102,将读取的数据打包成数据块。
中间件从源数据库中读取一条条数据,每条数据的数据量比较小。为了增强处理性能,中间件将读取的数据打包成数据块,每个数据块包含若干条数据。数据块具有预设块大小,该预设块大小可根据经验来设定,本发明对此不作限制。
步骤S103,将数据块保存到数据块池中,并向多个线程发送广播通知。
中间件内部预先建立了数据块池,并创建了多个线程,每个线程与目的数据库之间建立有一条用于写入数据的连接。中间件将数据块保存到数据块池中,并向多个线程发送广播通知,以通知各个线程有新的数据块需要写入。
步骤S104,接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。
接收到广播通知的线程根据自身的工作状态选择是否读取数据块。为了提高处理速度,本发明要求空闲的线程才可从数据块池中读取数据块。如果在发送广播通知后,当前中间件内没有空闲的线程,则数据块暂存于数据块池中,等待中间件内有线程空闲后,再从数据块池中读取一个数据块,读取成功后执行将数据块写入目的数据库的操作。
利用本实施例提供的数据同步方法,从源数据库中读取数据,将读取的数据打包成数据块;将数据块保存到数据块池中,并向多个线程发送广播通知;接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库。本实施例提供的方法不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程执行将数据块写入目的数据库的操作,多个线程并行运行,一个线程从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。
图2示出了根据本发明另一个实施例的数据同步方法的流程示意图。如图2所示,该方法包括如下步骤:
步骤S201,与源数据库建立用于读取数据的至少一条连接,以及创建多个线程,且每个线程与目的数据库建立一条用于写入数据的连接。
中间件预先与源数据库建立用于读取数据的至少一条连接。基于数据写入的速度远低于数据读取的速度的现状,中间件与源数据库之间建立一条用于读取数据的连接,即可满足中间件的处理需求。如果一条连接不能满足需求,例如数据写入的速度高于数据读取的速度,也可以建立两条及以上用于读取数据的连接。所谓建立连接具体为源数据库开设至少一个数据读取端口,中间件通过访问该数据读取端口的方式读取数据。
中间件还预先创建有多个线程,每个线程与目的数据库建立一条用于写入数据的连接。多个线程之间为并行处理方式,各个线程之间的运行互不干扰。所创建的线程的数量可根据实际情况而设定,例如根据需要同步的数据总量,中间件资源消耗状况等综合考虑而设定,本发明对此不作限制。每个线程与目的数据库建立一条用于写入数据的连接,具体地,目的数据库为每个线程开设一数据写入端口,线程访问对应的数据写入端口写入数据。
步骤S202,从源数据库中读取数据。
基于所建立的连接,中间件从源数据库中读取数据。
步骤S203,按照预设块大小,将读取的数据打包成数据块。
中间件从源数据库中读取一条条数据,每条数据的数据量比较小。为了增强处理性能,中间件将读取的数据打包成数据块,每个数据块包含若干条数据。数据块具有预设块大小,该预设块大小可根据经验来设定,本发明对此不作限制。通过将数据打包成数据块,由于数据块的大小相对固定,使得后续各个线程处理一个数据块的时间相差不大,各个线程之间负载相对均衡,优化处理性能。
举例来说,假设预设块大小为16M,在进行打包处理时,按照数据读取的先后顺序对先读取的数据进行打包,当数据量接近16M时,一个数据块打包完成,继续打包下一数据块。由于每条数据的数据量相差较大,本发明不严格要求每个数据块的大小都是16M,而是接近16M即可,有的数据块可略大于16M,有的数据块可略小于16M。
步骤S204,将数据块保存到数据块池中,并向多个线程发送广播通知。
中间件内部预先建立了数据块池,中间件将数据块保存到数据块池中,并向多个线程发送广播通知,以通知各个线程有新的数据块需要写入。本发明中,数据块池用于暂时存储数据块,当多个线程的写数据的速度不如读数据的速度快时,数据块池存储的数据块有可能越来越多,为了避免数据量超过数据块池的内存限制,导致数据块丢失的问题,本发明对数据块池暂存的数据块的数量或数据量进行限制。
在一个具体实施例中,方法还可包括:判断数据块池中的数据块的数量是否到达预设数量阈值;若是,则停止从源数据库中读取数据,直至数据块池中的数据块的数量小于预设数量阈值。在这个实施例中,对数据块池暂存的数据块的数量限制为不能超过预设数量阈值,一旦超过,则停止从源数据库中读取数据。
在另一个具体地实施例中,方法还可包括:判断数据块池中的数据量是否到达预设阈值;若是,则停止从源数据库中读取数据,直至数据块池中的数据量小于预设阈值。在这个实施例中,对数据块池暂存的数据量限制为不能超过预设阈值,一旦超过,则停止从源数据库中读取数据。
步骤S205,设置用于锁定数据块读取操作的锁。
为了避免多个空闲线程同时读取数据块而引发的冲突问题,本实施例设置用于锁定数据块读取操作的锁。只有抢锁成功的线程才可从数据块池中读取数据块。
步骤S206,多个线程判断自身是否处于空闲状态,判断为空闲状态的线程发起抢锁请求。
接收到广播通知的线程根据自身的工作状态选择是否读取数据块。为了提高处理速度,本发明要求空闲的线程才可从数据块池中读取数据块。因此,当线程接收到广播通知后,判断自身是否处于空闲状态,若是,则发起抢锁请求。
步骤S207,抢锁成功的空闲线程从数据块池中读取数据块。
步骤S208,抢锁成功的空闲线程从数据块池中成功读取一个数据块之后,对锁进行释放处理。
抢锁成功的空闲线程从数据块池中成功读取一个数据块之后,对锁进行释放处理。之前抢锁失败的空闲线程可以再次发起抢锁请求,再由抢锁成功的空闲线程从数据块池中读取数据块,如果数据块池中已没有数据块,则空闲线程继续等待广播通知。
步骤S209,抢锁成功的空闲线程将数据块写入目的数据库。
抢锁成功的空闲线程将数据块解析为一条条数据,将数据写入目的数据块。具体地,抢锁成功的空闲线程访问目的数据库为其开设的数据写入端口,向目的数据库写入数据。
本实施例提供的数据同步方法适用于MongoDB分布式数据库系统。MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为 WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是面向集合的数据库系统。所谓面向集合,是指数据被分组存储在数据集中,被称为一个集合。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。这种存储形式被称为BSON(BinarySerialized Document Format)。
本实施例提供的方法不仅可以同步两个MongoDB(源数据库和目的数据库)的所有数据,还可以同步两个MongoDB的部分数据,例如同步指定集合的数据。中间件在同步过程中,还可以对指定集合的相关字段进行修改,例如对指定集合的命名进行修改。在源数据库中命名为A的集合,同步给目的数据库中更名为B,A集合和B集合的数据内容一致。下面以将源数据库的A集合同步给目的数据库为例介绍本发明的实现方案。
首先,中间件与源数据库建立用于读取数据的至少一条连接,以及创建多个线程,且每个线程与目的数据库建立一条用于写入数据的连接;
中间件从源数据库中读取A集合的数据。可选地,如果需要对A集合的命名做出更改,则中间件解析出A集合数据的命名字段,将A集合的命名字段进行统一替换,得到B集合;
中间件按照预设块大小,将B集合数据打包成数据块;
中间件将数据块保存到数据块池中,并向多个线程发送广播通知;
中间件设置用于锁定数据块读取操作的锁;
多个线程判断自身是否处于空闲状态,判断为空闲状态的线程发起抢锁请求;
抢锁成功的空闲线程从数据块池中读取数据块;
抢锁成功的空闲线程从数据块池中成功读取一个数据块之后,对锁进行释放处理。
抢锁成功的空闲线程将数据块写入目的数据库。
利用本实施例提供的数据同步方法,通过与源数据库和目的数据库建立连接,从源数据库读取数据之后,将数据打包成数据块放入数据块池中;设置用于锁定数据块读取操作的锁,空闲线程发起抢锁请求,抢锁成功的空闲线程从数据块池中读取数据块,将其写入目的数据库。本实施例提供的方法不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程执行将数据块写入目的数据库的操作,多个线程并行运行,一个线程从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。另外,通过将数据打包成数据块,由于数据块的大小相对固定,使得后续各个线程处理一个数据块的时间相差不大,各个线程之间负载相对均衡,优化处理性能。进一步的,为了避免数据量超过数据块池的内存限制,导致数据块丢失的问题,本发明对数据块池暂存的数据块的数量或数据量进行限制,避免了堵塞引发的问题。利用锁机制,避免了多个空闲线程同时读取数据块而引发的冲突问题。本实施例提供的数据同步方法尤其适用于MongoDB分布式数据库系统,不仅可以同步两个MongoDB的所有数据,还可以同步两个MongoDB的指定集合的数据。
本实施例的数据同步方法是一种第三方解决方案,具体可利用中间件实现。由于利用了中间件,源数据库和目的数据库之间并未直接建立连接,不会改变分布式系统中数据库之间的连接关系,因而不会触发因新建连接而导致的主数据库选举机制,也就不会引起因主数据块选举机制导致的数据库性能受影响的问题。
图3示出了根据本发明一个实施例的数据同步装置的功能框图。如图3 所示,该装置包括:数据读取模块301,打包模块302,保存模块303,通知模块304,以及多个线程处理模块305。
数据读取模块301,适于从源数据库中读取数据。
进一步的,数据读取模块301还适于:与源数据库建立用于读取数据的至少一条连接。
数据读取模块301预先与源数据库建立用于读取数据的至少一条连接。基于数据写入的速度远低于数据读取的速度的现状,数据读取模块301与源数据库之间建立一条用于读取数据的连接,即可满足数据同步装置的处理需求。如果一条连接不能满足需求,例如数据写入的速度高于数据读取的速度,也可以建立两条及以上用于读取数据的连接。所谓建立连接具体为源数据库开设至少一个数据读取端口,数据读取模块301通过访问该数据读取端口的方式读取数据。
打包模块302,适于将读取的数据打包成数据块。由于数据读取模块301 所读取的每条数据的数据量比较小,为了增强处理性能,打包模块302按照预设块大小,将读取的数据打包成数据块,每个数据块包含若干条数据。数据块具有预设块大小,该预设块大小可根据经验来设定,本发明对此不作限制。通过将数据打包成数据块,由于数据块的大小相对固定,使得后续各个线程处理一个数据块的时间相差不大,各个线程之间负载相对均衡,优化处理性能。
保存模块303,适于将数据块保存到数据块池中。
通知模块304,适于向多个线程处理模块发送广播通知,以通知各个线程有新的数据块需要写入。
本发明中,数据块池用于暂时存储数据块,当多个线程处理模块的写数据的速度不如读数据的速度快时,数据块池存储的数据块有可能越来越多,为了避免数据量超过数据块池的内存限制,导致数据块丢失的问题,本发明对数据块池暂存的数据块的数量或数据量进行限制。
数据读取模块301还适于:判断数据块池中的数据块的数量是否到达预设数量阈值;若是,则停止从源数据库中读取数据,直至数据块池中的数据块的数量小于预设数量阈值。
数据读取模块301还适于:判断数据块池中的数据量是否到达预设阈值;若是,则停止从源数据库中读取数据,直至数据块池中的数据量小于预设阈值。
多个线程处理模块305,其中处于空闲状态的线程处理模块适于:从数据块池中读取数据块,并将数据块写入目的数据库。
进一步的,该装置还包括:创建模块306,适于创建多个线程处理模块。
每个线程处理模块适于:与目的数据库建立一条用于写入数据的连接。
每个线程处理模块与目的数据库建立一条用于写入数据的连接。多个线程处理模块之间为并行处理方式,各个线程处理模块之间的运行互不干扰。所创建的线程处理模块的数量可根据实际情况而设定,例如根据需要同步的数据总量,数据同步装置资源消耗状况等综合考虑而设定,本发明对此不作限制。每个线程处理模块与目的数据库建立一条用于写入数据的连接,具体地,目的数据库为每个线程处理模块开设一数据写入端口,线程处理模块访问对应的数据写入端口写入数据。
进一步的,该装置还包括:锁设置模块307,适于设置用于锁定数据块读取操作的锁。为了避免多个空闲线程同时读取数据块而引发的冲突问题,本装置设置用于锁定数据块读取操作的锁,只有抢锁成功的线程处理模块才可从数据块池中读取数据块。
线程处理模块305进一步适于:判断自身是否处于空闲状态,若是,则发起抢锁请求。
其中,抢锁成功的线程处理模块进一步适于:从数据块池中读取数据块,将数据块写入目的数据库。
抢锁成功的线程处理模块还适于:在从数据块池中成功读取一个数据块之后,对锁进行释放处理。
本实施例提供的装置不仅可以同步两个MongoDB(源数据库和目的数据库)的所有数据,还可以同步两个MongoDB的部分数据,例如同步指定集合的数据。装置在同步过程中,还可以对指定集合的相关字段进行修改,例如对指定集合的命名进行修改。在源数据库中命名为A的集合,同步给目的数据库中更名为B,A集合和B集合的数据内容一致。下面以将源数据库的 A集合同步给目的数据库为例介绍本发明的实现方案。
利用本实施例提供的数据同步装置,通过与源数据库和目的数据库建立连接,从源数据库读取数据之后,将数据打包成数据块放入数据块池中;设置用于锁定数据块读取操作的锁,空闲线程发起抢锁请求,抢锁成功的空闲线程从数据块池中读取数据块,将其写入目的数据库。本实施例提供的装置不考虑待同步对象的顺序问题。由于数据库中的数据本身之间无顺序,在同步过程中,无需考虑数据之间的顺序问题,因此可以采取并行处理的方式,具体通过多个线程处理模块执行将数据块写入目的数据库的操作,多个线程处理模块并行运行,一个线程处理模块从数据块池中读取一个数据块后,就执行写入操作,写入完成空闲后,如果数据块池中又有新的数据块,再去读取并写入,这种多个线程处理模块并行处理的方式大大提高了数据写入的速度,解决了由于数据写入的速度远低于数据读取的速度而导致的数据写入占用的时间过长的问题,提升了数据同步效率。另外,通过将数据打包成数据块,由于数据块的大小相对固定,使得后续各个线程处理模块处理一个数据块的时间相差不大,各个线程处理模块之间负载相对均衡,优化处理性能。进一步的,为了避免数据量超过数据块池的内存限制,导致数据块丢失的问题,本发明对数据块池暂存的数据块的数量或数据量进行限制,避免了堵塞引发的问题。利用锁机制,避免了多个空闲线程同时读取数据块而引发的冲突问题。本实施例提供的数据同步装置尤其适用于MongoDB分布式数据库系统,不仅可以同步两个MongoDB的所有数据,还可以同步两个MongoDB的指定集合的数据。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据同步装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (12)
1.一种数据同步方法,所述方法由中间件实现,所述中间件与源数据库建立用于读取数据的至少一条连接,以及创建多个线程,且每个线程与目的数据库建立一条用于写入数据的连接,所述中间件内部预先建立数据块池;所述方法包括:
从源数据库中读取数据;
将读取的数据打包成数据块;
将数据块保存到数据块池中,并向多个线程发送广播通知;
接收到广播通知的空闲线程从数据块池中读取数据块,并将数据块写入目的数据库,其中,多个线程支持并行处理的方式将数据块写入目的数据库。
2.根据权利要求1所述的方法,其中,所述将读取的数据打包成数据块进一步包括:按照预设块大小,将读取的数据打包成数据块。
3.根据权利要求1所述的方法,其中,在所述向多个线程发送广播通知之后,所述方法还包括:
设置用于锁定数据块读取操作的锁;
所述多个线程判断自身是否处于空闲状态,若是,则发起抢锁请求;
所述接收到广播通知的空闲线程从数据块池中读取数据块具体为:抢锁成功的空闲线程从数据块池中读取数据块。
4.根据权利要求3所述的方法,其中,在抢锁成功的空闲线程从数据块池中成功读取一个数据块之后,所述方法还包括:抢锁成功的空闲线程释放锁。
5.根据权利要求1或3所述的方法,其中,所述方法还包括:
判断所述数据块池中的数据块的数量是否到达预设数量阈值;
若是,则停止从源数据库中读取数据,直至所述数据块池中的数据块的数量小于所述预设数量阈值。
6.根据权利要求1或3所述的方法,其中,所述方法还包括:
判断所述数据块池中的数据量是否到达预设阈值;
若是,则停止从源数据库中读取数据,直至所述数据块池中的数据量小于所述预设阈值。
7.一种数据同步装置,所述装置由中间件实现,所述中间件与源数据库建立用于读取数据的至少一条连接,以及创建多个线程,且每个线程与目的数据库建立一条用于写入数据的连接,所述中间件内部预先建立数据块池;所述装置包括:
数据读取模块,适于从源数据库中读取数据;
打包模块,适于将读取的数据打包成数据块;
保存模块,适于将数据块保存到数据块池中;
通知模块,适于向多个线程处理模块发送广播通知;
多个线程处理模块,其中处于空闲状态的线程处理模块适于:从数据块池中读取数据块,并将数据块写入目的数据库,其中,多个线程处理模块支持并行处理的方式将数据块写入目的数据库。
8.根据权利要求7所述的装置,其中,所述打包模块具体适于:按照预设块大小,将读取的数据打包成数据块。
9.根据权利要求7所述的装置,其中,所述装置还包括:
锁设置模块,适于设置用于锁定数据块读取操作的锁;
所述线程处理模块进一步适于:判断自身是否处于空闲状态,若是,则发起抢锁请求;
其中,抢锁成功的线程处理模块进一步适于:从数据块池中读取数据块,将数据块写入目的数据库。
10.根据权利要求9所述的装置,其中,所述抢锁成功的线程处理模块还适于:在从数据块池中成功读取一个数据块之后,对锁进行释放处理。
11.根据权利要求7或9所述的装置,其中,所述数据读取模块还适于:判断所述数据块池中的数据块的数量是否到达预设数量阈值;若是,则停止从源数据库中读取数据,直至所述数据块池中的数据块的数量小于所述预设数量阈值。
12.根据权利要求7或9所述的装置,其中,所述数据读取模块还适于:判断所述数据块池中的数据量是否到达预设阈值;若是,则停止从源数据库中读取数据,直至所述数据块池中的数据量小于所述预设阈值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611219560.1A CN106528893B (zh) | 2016-12-26 | 2016-12-26 | 数据同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611219560.1A CN106528893B (zh) | 2016-12-26 | 2016-12-26 | 数据同步方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106528893A CN106528893A (zh) | 2017-03-22 |
CN106528893B true CN106528893B (zh) | 2020-01-10 |
Family
ID=58338032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611219560.1A Active CN106528893B (zh) | 2016-12-26 | 2016-12-26 | 数据同步方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106528893B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108694199A (zh) * | 2017-04-10 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 数据同步装置、方法、存储介质及电子设备 |
CN109962957B (zh) * | 2017-12-26 | 2022-04-05 | 珠海全志科技股份有限公司 | 一种多区域多活服务的数据同步方法和装置 |
CN109656999B (zh) * | 2018-10-11 | 2024-03-15 | 平安科技(深圳)有限公司 | 大数据量的数据同步方法、设备、存储介质及装置 |
CN111221899B (zh) * | 2018-11-26 | 2023-09-01 | 聚好看科技股份有限公司 | 一种跨机房数据同步方法和装置 |
CN110633321B (zh) * | 2019-08-30 | 2022-06-03 | 中国人民财产保险股份有限公司 | 一种数据的同步方法、装置及设备 |
CN112734583A (zh) * | 2021-01-15 | 2021-04-30 | 深轻(上海)科技有限公司 | 一种寿险精算模型多线程并行计算方法 |
CN112732839B (zh) * | 2021-01-21 | 2023-06-23 | 云账户技术(天津)有限公司 | 一种数据同步方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102137278A (zh) * | 2010-12-30 | 2011-07-27 | 广州市动景计算机科技有限公司 | 基于移动终端的流媒体播放分发系统及其方法 |
CN102739567A (zh) * | 2012-07-03 | 2012-10-17 | 苏州阔地网络科技有限公司 | 一种进程间通信方法及系统 |
CN103617195A (zh) * | 2013-11-05 | 2014-03-05 | 杭州沃趣网络科技有限公司 | 一种用于MySQL数据库的数据同步系统和方法 |
CN104615736A (zh) * | 2015-02-10 | 2015-05-13 | 上海创景计算机系统有限公司 | 基于数据库的大数据快速解析存储方法 |
CN104734915A (zh) * | 2015-03-05 | 2015-06-24 | 重庆邮电大学 | 一种复合多进程多线程的多网络并发动态仿真方法 |
-
2016
- 2016-12-26 CN CN201611219560.1A patent/CN106528893B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102137278A (zh) * | 2010-12-30 | 2011-07-27 | 广州市动景计算机科技有限公司 | 基于移动终端的流媒体播放分发系统及其方法 |
CN102739567A (zh) * | 2012-07-03 | 2012-10-17 | 苏州阔地网络科技有限公司 | 一种进程间通信方法及系统 |
CN103617195A (zh) * | 2013-11-05 | 2014-03-05 | 杭州沃趣网络科技有限公司 | 一种用于MySQL数据库的数据同步系统和方法 |
CN104615736A (zh) * | 2015-02-10 | 2015-05-13 | 上海创景计算机系统有限公司 | 基于数据库的大数据快速解析存储方法 |
CN104734915A (zh) * | 2015-03-05 | 2015-06-24 | 重庆邮电大学 | 一种复合多进程多线程的多网络并发动态仿真方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106528893A (zh) | 2017-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106528893B (zh) | 数据同步方法及装置 | |
US10331468B2 (en) | Techniques for routing service chain flow packets between virtual machines | |
CN1890640B (zh) | 高效的系统管理同步方法和系统 | |
CN103605568A (zh) | 一种多线程管理方法及装置 | |
CN108108463B (zh) | 基于时间片调度的同步任务处理方法及装置 | |
US9400767B2 (en) | Subgraph-based distributed graph processing | |
CN105843819B (zh) | 一种数据导出方法及装置 | |
JP2018534675A (ja) | 再マッピング同期によるタスクサブグラフの加速化 | |
US9836516B2 (en) | Parallel scanners for log based replication | |
US20160182320A1 (en) | Techniques to generate a graph model for cloud infrastructure elements | |
WO2020232875A1 (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN103412786A (zh) | 一种高性能服务器架构系统及数据处理方法 | |
WO2013163008A1 (en) | Systems and methods for partitioning of singly linked lists for allocation memory elements | |
CN103647850A (zh) | 一种分布式版本控制系统的数据处理方法、设备及系统 | |
EP3918467A1 (en) | Handling an input/output store instruction | |
CN112052230A (zh) | 多机房数据同步方法、计算设备及存储介质 | |
CN113641456B (zh) | 数据集群的部署方法、装置及系统 | |
CN109491934A (zh) | 一种集成计算功能的存储管理系统控制方法 | |
CN114327280B (zh) | 一种基于冷热分离存储的消息存储方法及系统 | |
CN110399101A (zh) | 一种磁盘的写操作处理方法、装置、系统及存储介质 | |
CN109002286A (zh) | 基于同步编程的数据异步处理方法及装置 | |
EP2951691B1 (en) | System and method for supporting work sharing muxing in a cluster | |
CN112486468A (zh) | 基于spark内核的任务执行方法、系统和计算机设备 | |
CN104182264B (zh) | 一种eMMC的开机优化方法及其装置 | |
CN104657204A (zh) | 短任务处理方法、装置及操作系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |