CN111930850A - 数据校验方法、装置、计算机设备和存储介质 - Google Patents
数据校验方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111930850A CN111930850A CN202011012343.1A CN202011012343A CN111930850A CN 111930850 A CN111930850 A CN 111930850A CN 202011012343 A CN202011012343 A CN 202011012343A CN 111930850 A CN111930850 A CN 111930850A
- Authority
- CN
- China
- Prior art keywords
- data
- library
- result
- verification
- source library
- 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.)
- Pending
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
- G06F16/273—Asynchronous replication or reconciliation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据存储与日志领域,具体一种数据校验方法、装置、计算机设备和存储介质。方法获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,源库内的待校验数据进行校验获得第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。同时通过预设钩子函数对目的库内的复制结果数据进行校验获得第二校验结果。通过对比第一校验结果与第二校验结果来保证主从之间数据复制的一致性。基于本申请,用户可以随时对数据复制发起一致性校验,判断源库与目的库内的主从数据是否一致。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据校验方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术与数据库技术的发展,出现了MongoDB数据库技术,MongoDB是一个基于分布式文件存储数据库。旨在为WEB(World Wide Web,全球广域网)应用提供可扩展的高性能数据存储解决方案。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
目前对于MongoDB数据库内的数据复制,一般通过操作记录日志来进行,复制集的任何数据变更都会在数据库内的主节点的相应集合下记操作记录日志,从属节点从主节点持续拉取操作记录日志并在本地回放,实现主从节点的数据实时同步。
然而,目前的操作记录日志并不能完全保证数据复制的一致性,如用户不小心在复制目标库的某个文档中加入了一个字段,这个时候虽然数据复制仍然会继续进行,也不会报错,但是这个时候两边的数据是不一致的,在切换之后这个字段影响会影响复制之后主从数据的一致性,进而可能影响业务逻辑的正确性。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效保证MongoDB数据库的数据复制过程主从一致性的数据校验方法、装置、计算机设备和存储介质。
一种数据校验方法,所述方法包括:
获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
一种数据校验装置,所述装置包括:
请求获取模块,用于获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
第一校验模块,用于获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
第二校验模块,用于根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
数据对比校验模块,用于对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
上述数据校验方法、装置、计算机设备和存储介质,通过获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,源库内的待校验数据进行校验获得第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。同时通过预设钩子函数对目的库内的复制结果数据进行校验获得第二校验结果。通过对比第一校验结果与第二校验结果来保证主从之间数据复制的一致性。基于本申请,用户可以随时对数据复制发起一致性校验,判断源库与目的库内的主从数据是否一致。
附图说明
图1为一个实施例中数据校验方法的应用环境图;
图2为一个实施例中数据校验方法的流程示意图;
图3为一个实施例中创建对比临时数据集合步骤的流程示意图;
图4为一个实施例中对数据表进行数据分区,得到数据块过程的流程示意图;
图5为另一个实施例中数据校验方法的流程示意图;
图6为一个实施例中数据校验过程的整体架构图;
图7为又一个实施例中数据校验方法的流程示意图;
图8为一个实施例中数据校验装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据校验方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与数据校验服务器104进行通信。数据校验服务器分别与MongoDB源库以及MongoDB目的库连接,MongoDB源库内的数据已被复制到MongoDB目的库,本申请的数据校验即为对已复制的主从数据是否一致进行校验。当需要数据校验是,终端102可以向数据校验服务器104发送数据校验请求,数据校验服务器104获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,数据校验请求用于对源库与目的库主从之间数据复制的一致性进行校验;获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志;根据更新后的操作记录日志同步在目的库内的第二对比临时数据集合中插入第一校验结果,通过预设钩子函数对目的库中与待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将第二校验结果保存至第二对比临时数据集合;对比第二对比临时数据集合内的第一校验结果与第二校验结果,获取数据校验结果。其中, 数据校验服务器104可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端102可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在一个实施例中,如图2所示,提供了一种数据校验请求方法,以该方法应用于图1中的数据校验服务器为例进行说明,假定迁移源库和目标库满足一直在保持数据同步,并且不存在同步错误,包括以下步骤:
步骤201,获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,数据校验请求用于对源库与目的库主从之间数据复制的一致性进行校验。
其中,本申请的数据校验方法具体用于对MongoDB这种半结构化的数据库,进行数据复制前后的校验。数据校验请求是指由终端102发送至数据校验服务器104,以请求数据校验服务器对数据校验请求对应的已复制数据进行校验进行数据校验的一个请求。数据校验请求内包含有已复制数据对应的源库信息以及目的库信息。通过数据校验请求,数据校验服务器可以确定是需要对从哪个源库复制到哪个目的库的数据进行校验。而源库操作记录日志具体是指Oplog日志。Oplog用于存储 MongoDB 数据库所有数据的操作记录,类似于mysql 的 binlog 日志。Oplog 的存在极大地方便了 MongoDB 副本集的各节点的数据同步,MongoDB 的主节点接收请求操作,然后在 Oplog 中记录操作,次节点异步地复制并应用这些操作。
具体地,在数据复制完成后,为了对复制前后数据是否一致进行校验,可以通过本申请的数据校验方法来进行数据校验。具体地,数据复制方的工作人员可以提交相应的数据校验请求至数据校验服务器,并在请求中指定数据校验的源库以及目的库。从而开始一项数据校验的进程。而后,数据校验服务器104接收获取数据校验请求,查找数据校验请求对应的源库操作记录日志,基于源库操作记录日志来开始数据校验的操作。可以通过数据库原生支持的MongoDB协议接管源库的Oplog数据,过滤数据只将与待对比的表相关的Oplog数据存放在消息队列里面,将消息队列里面Oplog数据按需在从库上重放。在其中一个实施例中,本申请的数据校验方法用于对云下数据库迁移到云上的过程中涉及到的复制数据进行数据校验,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。而数据复制的这个过程一般包括全量数据导出、全量输入导入、增量数据导入、保持增量同步等几个步骤,最后一步保持增量同步也就是说,云下数据库的写入都会几乎实时的同步到云上数据库。而用户将业务从云下切换到云上的流程是:1)云下数据停止写入;2)停止主从同步;3)确认两边数据是否一致(人工或者工具确认);4)将业务读写都切换到云上数据库。当云上有数据一致性的校验的能力之后,在切换之前,也就是云下数据库数据停止写入之前,就可以发起在线进行数据一致性对比的任务,得到数据一致性对比结果。如果不一致,用户可以判断是否会影响业务,是否进行修复或者重新开始数据迁移任务,不用像之前停止服务写入之后判断,将服务交割的时间减少到秒级。有了在线工具之后,一般只需要确认云下的操作记录日志是否都同步到云上了。云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统 (以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
步骤203,获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。
其中,可以通过对源库内的待校验数据进行数据校验来生成相应的数据校验结果,在其中一个实施例中,可以通过CRC(Cyclic Redundancy Check,循环冗余校验)校验的方式来对源库内的数据进行校验,并生成相应的校验结果。
具体地,当建立用于存储对比临时数据的数据集合后,就可以开始相应的数据校验流程。数据校验具体可以是分块分区进行的,对源库内的一个个数据分区进行数据校验,而后将对源库内数据进行数据校验的结果保存到第一对比临时数据集合,同时根据保存的结果更新操作记录日志。同时由于目的库与源库存在数据同步的关系。当第一校验结果被添加到第一对比临时数据集合内时,在第二对比临时数据集合内也会根据操作记录日志同步地生成第一校验结果。
步骤205,根据更新后的操作记录日志同步在目的库内的第二对比临时数据集合中插入第一校验结果,通过预设钩子函数对目的库中与待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将第二校验结果保存至第二对比临时数据集合。
其中,钩子函数(HOOK)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
具体地,在本申请中,每当源库的操作记录日志在目的库的第一对比临时数据集合中,插入第一校验结果时,可以通过预先设置的钩子函数,在目的库内,对已经复制完成的数据进行相同的数据校验操作。对于数据校验,这部分已经复制完成的数据应与源库内的待校验数据相同,因此,在进行数据校验时,可以通过对复制前后的待检验数据的校验结果进行对比,来确定主从数据是否一致。
步骤207,对比第二对比临时数据集合内的第一校验结果与第二校验结果,获取数据校验结果。
具体地,待校验数据具体可以以分表按照一个个数据块(chuck)的形式来进行校验,此时,第一校验结果与第二校验结果分别为一个个数据块的校验结果,通过对比第二对比临时数据集合内的第一校验结果与第二校验结果,即对比每个表的每个数据块的校验结果,输出有哪些数据块是不一致的;如果所有数据块的校验结果一致,说明主从数据是一致的。
上述数据校验方法,通过获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,源库内的待校验数据进行校验获得第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。同时通过预设钩子函数对目的库内的复制结果数据进行校验获得第二校验结果。通过对比第一校验结果与第二校验结果来保证主从之间数据复制的一致性。基于本申请,用户可以随时对数据复制发起一致性校验,判断源库与目的库内的主从数据是否一致。
在一个实施例中,如图3所示,步骤203之前,还包括:
步骤302,在数据校验请求对应的源库创建第一对比临时数据集合。
步骤304,通过源库的操作记录日志在目的库创建第二对比临时数据集合。
其中,第一对比临时数据集合可以看做为数据库内的一张数据表,以表的形式在源库创建。第一对比临时数据集合具体用于存储数据校验过程中生成的对比临时数据,防止数据校验过程对源库内的数据造成干扰。同时由于目的库与源库存在数据同步的关系。当在源库创建第一对比临时数据集合时,创建第一对比临时数据集合的建表语句通过源库操作记录日志在目的库上重放,从而在目的库上也创建与第一对比临时数据集合相对应的第二对比临时数据集合。
具体地,当需要进行数据校验对比时,可以先在源库与目的库内同步创建用于存储对比临时数据的集合。这一过程可以通过建表语句在源库内实现,而由于源库与目的库间数据复制的同步关系,在源库的第一对比临时数据集合后,目的库也会回放建表语句,从而生成第二对比临时数据集合。
在一个实施例中,步骤203之前,还包括:删除第一对比临时数据集合内的历史校验结果;通过源库的操作记录日志,在目的库中删除第二对比临时数据集合内的历史校验结果。
其中,历史校验结果是指在本次校验之前,被保存在第一对比临时数据集合内的校验数据。其具体可以为本次数据校验以前的其他校验过程产生的校验结果。
具体地,为了防止历史数据对本次数据校验过程的干扰,在进行数据校验前,可以先将第一对比临时数据集合内所有的历史校验结果删除,将第一对比临时数据集合的数据清空。此时由于源库与目的库间数据复制的同步关系,在源库内清空第一对比临时数据集内的数据后,目的库也会同步地在目的库中删除第二对比临时数据集合内的历史校验结果。在本实施例中,通过删除第一对比临时数据集合与第二对比临时数据集合内的历史校验结果,从而有效避免历史校验数据对本次数据校验的影响,提高数据校验的准确率。
在一个实施例中,如图4所示,步骤203之前,还包括:
步骤401,查找待校验数据中各数据表的主键。
步骤403,根据主键将数据表拆分为数据块,得到数据块格式的待校验数据。
其中,MongoDB有数据库(Database), 集合(Collections),文档(Document)三级,分别对应其他关系型数据库的数据库、表、行数据。各数据表的主键即为各个数据集合的主键。主键又称主关键字(primary key),是数据表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表的主键可以由多个关键字共同组成,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATETABLE 或 ALTER TABLE 语句中定义。而数据块是指将数据表内的多条数据分区块地组合起来,形成一个个数据块。
具体地,在进行数据校验的过程中,对于其中任何一张数据表t1,都可以找到这个表的主键 “_id”,按照主键将表的数据划分成一个个的小数据块 chuck,比如可以将第1-1000,1001-1999...条数据等等分成一个区块,每个区块内包含1000条数据。同时对于每个数据区块,可以确认数据区块的边界,比如1-1000数据块的左边界为第1条数据,右边界为第1000条数据。在本实施例中,通过将待校验数据中各数据表拆分为数据区块,可以分区块地进行数据校验,从而在得到最后的数据校验结果后,当出现数据不一致时,可以迅速定位到不一致的数据区块,提高数据修正的效率。
在一个实施例中,如图5所示,步骤203包括:
步骤502,通过CRC校验,依次计算待校验数据内单个数据块的第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。
步骤205包括:
步骤504,根据更新后的操作记录日志同步在目的库内的第二对比临时数据集合中插入第一校验结果,通过预设钩子函数对目的库中单个数据块对应的复制数据块进行数据校验,获取第二校验结果,将第二校验结果保存至第二对比临时数据集合。
步骤207包括:
步骤506,对比第二对比临时数据集合内各个数据块的第一校验结果,与各个数据块的复制数据块的第二校验结果,获取数据校验结果。
其中CRC校验是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。本申请中的数据复制属于数据传输的一种,可以通过CRC校验来分别对源库以及目的库内复制前后的数据块进行校验,获得相应的CRC校验值,而后通过对比CRC校验值来对数据是否一致进行判断。
具体地,在将数据分区块进行处理后,可以依次对数据表内每个数据块的列进行CRC校验,并将其组合起来,获得该数据块CRC校验值,即单个数据块的第一校验结果。并在每得到一个第一校验结果后,就将得到的校验结果写入到第一对比临时数据集合与第二对比临时数据集合内。而同时,钩子函数可以侦测到校验结果被写入到第一对比临时数据集合与第二对比临时数据集合这个操作,并在识别之后,对目的库中待校验数据对应的复制结果数据进行相同的CRC数据校验,得到复制后的数据块对应的第二校验结果。通过不断地重复上述的操作。直到所有的数据表内的数据块都被校验完成后,可以进行最终的校验对比。在最后的数据校验对比中,对比第二对比临时数据集合内各个数据块的第一校验结果,与各个数据块的复制数据块的第二校验结果,获取数据校验结果。通过检验第二对比临时数据集合中的每个表的每个数据块的校验结果,输出有哪些数据块是不一致的;如果所有数据块的校验结果一致,说明主从数据是一致的。在其中一个实施例中,CRC校验过程中还可以记录数据块的行数,通过数据块行数与CRC校验值两者的对比来确定主从数据是否一致。本实施例中,数据校验过程与数据对比过程都是基于数据块的形式来进行处理,可以在复制数据出现主从不一致时进行快速处理,提高数据校验处理过程的处理效率。
在一个实施例中,通过CRC校验获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至第一对比临时数据集合包括:开始预设事务,为待校验数据内单个数据块内的文档间接添加写锁;通过CRC校验获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至第一对比临时数据集合,结束预设事务;删除第一对比临时数据集合内的写锁对应的写锁数据后,根据删除结果更新操作记录日志。
其中,事务,在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始和事务结束之间执行的全体操作组成。而写锁是读写锁中的一种,读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。
具体地,间接写锁可以通过对于数据块区间内的所有文档,在文档中新增一个字段,键值为$_id和“checksum”的字符串拼接,保证唯一性。同时在将数据校验结果保存至第二对比临时数据集合之前,去除第一对比临时数据集合内的写锁的新增键。从而确保写锁数据不在目标库重放。在本实施例中,通过对文档区间加锁,计算CRC,写入另外一个文档,将几个操作是一个事务,对于这个数据块区间来说,在这个事务自身源库操作记录日志写入之前,是不可能有其他事务更改并先于这个事务写入源库操作记录日志的,这就相当于在一个类似静止的时刻对数据库进行了数据检查,那么在这个源库操作记录日志在从机上执行之前(很容易从源库操作记录日志的内容判断出,当前源库操作记录日志是否是数据校验操作产生的,是对哪一段数据做了检验),从机相当于也是一个类似静止的状态,因为源库操作记录日志是单线程写入的。这样就保证了在两个数据库的同一时刻执行相同的校验操作。防止了避免源库与目的库同时执行类似操作对数据校验的干扰。
在一个实施例中,步骤203之前,还包括:将数据校验请求对应的源库的隔离级别设置为快照隔离。
其中,快照隔离(Snapshot Isolation)是数据库常见的隔离级别中的一种,也是MongoDB4.0以后版本的默认隔离级别,在此隔离级别下,事务中读到的事务仍然可能被其他事务所改变。
本实施例中,所以在上述事务中显示的对一个数据块区间的文档集合都进行了写锁更新,确保这一个短暂的时间内,这些文档不能被其他事务所改变,进而保证了读区间数据块、计算CRC、写入操作记录日志对于数据库来说是同一个时刻完成的。 如果这个区间足够小,计算CRC的时间足够的块,对于MongoDB的其他操作来说,是几乎没有影响,这要保证了本方案的实际可操作性。由于MongoDB实现的事务隔离级别为Snapshot Isolation,而且没有显式的锁住某个文档的操作,因而本申请中用写文档间接的获取写锁;从而保证在进行数据校验时,源库内的数据不被更改。
本申请还提供一种应用场景,该应用场景应用上述的数据校验方法。具体地,该数据校验方法在该应用场景的应用如下:
如图6所示,当需要在云服务器上同步本地服务器内的数据,且云服务器与本地服务器都通过MongoDB数据来存储相关的数据时,可以通过本申请的数据校验方法来对主从之间数据复制的一致性进行校验。具体地,在方案开始前,用户现在本地的MongoDB数据库内写入数据。而后,通过全量数据导出、全量输入导入、增量数据导入以及保持增量同步等步骤,将本地的数据同步至云上的服务器。当确认同步全部完成,或者暂时停止数据同步后,就可以通过本申请的数据校验方法来对已同步数据进行校验。本申请的方案中,云上的组件Oplog Processor可以通过MongoDB的复制协议拉取本地数据库的Oplog,解析之后缓存在云上,而后更新器(Updater)根据需要对Oplog做一些转换或者执行钩子操作,最后将数据写入到云上的目的实例。基于MongoDB表的主键_id和Oplog,借助事务的能力,读取指定表的一段文档,对这部分做CRC校验,然后在同一个事务中把校验的结果在写入源端的MongoDB。CRC校验这个事件,本身也会产生一个Oplog,在Updater中识别到这个Oplog之后,对目的端相同的数据段进行CRC校验,并将最终的结果一起写入到目标端的MongoDB。最终根据目标端所有文档、所有数据段的校验结果,输出最终的数据一致性报告。本申请的一个最具体实施例可以参照图7,在本实施例中,同时包含源库与目的库,首先在源库中,创建用于保存数据的第一对比临时数据集合,同时通过源库的操作记录日志,在目的库内同步创建第二对比临时数据集合。而后开始校验,在校验的过程中,将待校验集合的主键(_id)作为对数据进行分块的依据。以后确定第一个数据块的左边界,可以将其记为X,同时删除第一对比临时数据集合内的历史信息,同时通过源库的操作记录日志Oplog,在目的库内同步删除第二对比临时数据集合内的历史信息。而后获取当前数据块的右边界与下一个数据块的左边界,将两个边界之间的数据作为一个数据块来进行数据校验。同时判断下一个数据块是否存在左边界。当不存在时,说明当前的数据块是表内最后一个数据块。此时可以将数据块的最大值作为右边界,记做Y。在确定数据块的范围后,可以在一个事务内,计算当前数据块的第一校验结果以及记录数,将其保存到第一对比临时数据集合中,在这个过程中,执行钩子操作,在目的库内计算与当前数据块对应的复制完成的数据块的第二校验结果与记录数,并将第二校验结果写入到第二对比临时数据集合中。而在将第一校验结果以及记录数保存到第一对比临时数据集合时,由于数据同步,在目的数据内,会同步地将第一校验结果也保存到第二对比临时数据集合中。同时通过循环处理,源库开始处理下一个数据块,而当全部处理完成后,可以在目的库中,对X到Y之间的数据块的校验结果进行对比。得到最终的数据校验结果。
应该理解的是,虽然图2-7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-7中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种数据校验装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:请求获取模块801、第一校验模块803、第二校验模块805和数据对比校验模块807,其中:
请求获取模块801,用于获取数据校验请求,查找数据校验请求对应源库以及目的库,并查找源库的操作记录日志,数据校验请求用于对源库与目的库主从之间数据复制的一致性进行校验;
第一校验模块803,用于获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志;
第二校验模块805,用于根据更新后的操作记录日志同步在目的库内的第二对比临时数据集合中插入第一校验结果,通过预设钩子函数对目的库中与待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将第二校验结果保存至第二对比临时数据集合;
数据对比校验模块807,用于对比第二对比临时数据集合内的第一校验结果与第二校验结果,获取数据校验结果。
在其中一个实施例中,还包括集合创建模块,用于:在数据校验请求对应的源库创建第一对比临时数据集合;通过源库的操作记录日志在目的库创建第二对比临时数据集合。
在其中一个实施例中,还包括集合初始化模块,用于:删除第一对比临时数据集合内的历史校验结果;通过源库的操作记录日志,在目的库中删除第二对比临时数据集合内的历史校验结果。
在其中一个实施例中,还包括数据分区模块,用于:查找待校验数据中各数据表的主键;根据主键将数据表拆分为数据块,得到数据块格式的待校验数据。
在其中一个实施例中,第一校验模块803用于:通过CRC校验,依次计算待校验数据内单个数据块的第一校验结果,将第一校验结果保存至源库内的第一对比临时数据集合,并更新操作记录日志。第二校验模块805用于:根据更新后的操作记录日志同步在目的库内的第二对比临时数据集合中插入第一校验结果,通过预设钩子函数对目的库中单个数据块对应的复制数据块进行数据校验,获取第二校验结果,将第二校验结果保存至第二对比临时数据集合。第一校验模块803用于:对比第二对比临时数据集合内各个数据块的第一校验结果,与各个数据块的复制数据块的第二校验结果,获取数据校验结果。
在其中一个实施例中,第一校验模块803用于:开始预设事务,为待校验数据内单个数据块内的文档间接添加写锁;通过CRC校验获取源库内待校验数据对应的第一校验结果,将第一校验结果保存至第一对比临时数据集合,结束预设事务;删除第一对比临时数据集合内的写锁对应的写锁数据后,根据删除结果更新操作记录日志。
在其中一个实施例中,还包括隔离级别设置模块,用于:将源库的隔离级别设置为快照隔离。
关于数据校验装置的具体限定可以参见上文中对于数据校验方法的限定,在此不再赘述。上述数据校验装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供获取和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据校验数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据校验方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据校验方法,其特征在于,所述方法包括:
获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
2.根据权利要求1所述的方法,其特征在于,所述获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志之前,还包括:
在数据校验请求对应的源库创建第一对比临时数据集合;
通过所述源库的操作记录日志在目的库创建第二对比临时数据集合。
3.根据权利要求2所述的方法,其特征在于,所述获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志之前,还包括:
删除第一对比临时数据集合内的历史校验结果;
通过所述源库的操作记录日志,在目的库中删除所述第二对比临时数据集合内的历史校验结果。
4.根据权利要求1所述的方法,其特征在于,所述获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志之前,还包括:
查找所述待校验数据中各数据表的主键;
根据所述主键将所述数据表拆分为数据块,得到数据块格式的所述待校验数据。
5.根据权利要求4所述的方法,其特征在于,所述获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志包括:
通过CRC校验,依次计算所述待校验数据内单个数据块的第一校验结果,将第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
所述根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合包括:
根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中所述单个数据块对应的复制数据块进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
所述对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果包括:
对比所述第二对比临时数据集合内各个数据块的第一校验结果,与各个数据块的复制数据块的第二校验结果,获取数据校验结果。
6.根据权利要求5所述的方法,其特征在于,所述通过CRC校验,依次计算所述待校验数据内单个数据块的第一校验结果,将第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志包括:
开始预设事务,为所述待校验数据内单个数据块内的文档间接添加写锁;
通过CRC校验获取所述源库内待校验数据对应的第一校验结果,将第一校验结果保存至所述第一对比临时数据集合,结束所述预设事务;
删除所述第一对比临时数据集合内的写锁对应的写锁数据后,根据删除结果更新所述操作记录日志。
7.根据权利要求6所述的方法,其特征在于,所述获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志之前,还包括:
将所述源库的隔离级别设置为快照隔离。
8.一种数据校验装置,其特征在于,所述装置包括:
请求获取模块,用于获取数据校验请求,查找所述数据校验请求对应源库以及目的库,并查找所述源库的操作记录日志,所述数据校验请求用于对所述源库与所述目的库主从之间数据复制的一致性进行校验;
第一校验模块,用于获取所述源库内待校验数据对应的第一校验结果,将所述第一校验结果保存至所述源库内的第一对比临时数据集合,并更新所述操作记录日志;
第二校验模块,用于根据更新后的所述操作记录日志同步在所述目的库内的第二对比临时数据集合中插入所述第一校验结果,通过预设钩子函数对所述目的库中与所述待校验数据对应的复制结果数据进行数据校验,获取第二校验结果,将所述第二校验结果保存至所述第二对比临时数据集合;
数据对比校验模块,用于对比所述第二对比临时数据集合内的所述第一校验结果与所述第二校验结果,获取数据校验结果。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011012343.1A CN111930850A (zh) | 2020-09-24 | 2020-09-24 | 数据校验方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011012343.1A CN111930850A (zh) | 2020-09-24 | 2020-09-24 | 数据校验方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111930850A true CN111930850A (zh) | 2020-11-13 |
Family
ID=73335131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011012343.1A Pending CN111930850A (zh) | 2020-09-24 | 2020-09-24 | 数据校验方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111930850A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113220785A (zh) * | 2021-05-21 | 2021-08-06 | 上海申铁信息工程有限公司 | 一种基于主键比对的数据库变更记录同步方法及装置 |
CN113391767A (zh) * | 2021-06-30 | 2021-09-14 | 北京百度网讯科技有限公司 | 数据一致性的校验方法、装置、电子设备及可读存储介质 |
CN113961625A (zh) * | 2021-10-27 | 2022-01-21 | 北京科杰科技有限公司 | 一种异构大数据管理平台任务迁移方法 |
CN114153649A (zh) * | 2021-12-09 | 2022-03-08 | 合肥康芯威存储技术有限公司 | 一种数据存储设备及其控制方法与电子设备 |
WO2023051308A1 (zh) * | 2021-09-29 | 2023-04-06 | 华为技术有限公司 | 数据校验方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007323422A (ja) * | 2006-06-01 | 2007-12-13 | Nec Corp | 分散データベースシステム及びそのデータ同期方法 |
CN110209521A (zh) * | 2019-02-22 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、计算机可读存储介质和计算机设备 |
CN110674116A (zh) * | 2019-09-25 | 2020-01-10 | 四川长虹电器股份有限公司 | 一种基于swoole的校验插入数据库数据重复的系统及方法 |
-
2020
- 2020-09-24 CN CN202011012343.1A patent/CN111930850A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007323422A (ja) * | 2006-06-01 | 2007-12-13 | Nec Corp | 分散データベースシステム及びそのデータ同期方法 |
CN110209521A (zh) * | 2019-02-22 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、计算机可读存储介质和计算机设备 |
CN110674116A (zh) * | 2019-09-25 | 2020-01-10 | 四川长虹电器股份有限公司 | 一种基于swoole的校验插入数据库数据重复的系统及方法 |
Non-Patent Citations (1)
Title |
---|
M.派伊芬: "《SQL数据库开发从入门到精通》", 31 January 2000, 北京希望电子出版社 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113220785A (zh) * | 2021-05-21 | 2021-08-06 | 上海申铁信息工程有限公司 | 一种基于主键比对的数据库变更记录同步方法及装置 |
CN113391767A (zh) * | 2021-06-30 | 2021-09-14 | 北京百度网讯科技有限公司 | 数据一致性的校验方法、装置、电子设备及可读存储介质 |
WO2023051308A1 (zh) * | 2021-09-29 | 2023-04-06 | 华为技术有限公司 | 数据校验方法、装置、设备及存储介质 |
CN113961625A (zh) * | 2021-10-27 | 2022-01-21 | 北京科杰科技有限公司 | 一种异构大数据管理平台任务迁移方法 |
CN113961625B (zh) * | 2021-10-27 | 2022-06-07 | 北京科杰科技有限公司 | 一种异构大数据管理平台任务迁移方法 |
CN114153649A (zh) * | 2021-12-09 | 2022-03-08 | 合肥康芯威存储技术有限公司 | 一种数据存储设备及其控制方法与电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11429641B2 (en) | Copying data changes to a target database | |
CN111930850A (zh) | 数据校验方法、装置、计算机设备和存储介质 | |
CN110019140B (zh) | 数据迁移方法、装置、设备以及计算机可读存储介质 | |
CN109906448B (zh) | 用于促进可插拔数据库上的操作的方法、设备和介质 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
CN106933703B (zh) | 一种数据库数据备份的方法、装置及电子设备 | |
CN110727724B (zh) | 数据抽取方法、装置、计算机设备和存储介质 | |
CN111444027B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
US11704335B2 (en) | Data synchronization in a data analysis system | |
US10013315B2 (en) | Reverse snapshot clone | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
CN111737227A (zh) | 数据修改方法及系统 | |
CN113868028A (zh) | 一种在数据节点上回放日志的方法、数据节点及系统 | |
JP2023546897A (ja) | オブジェクト処理方法、装置、及びコンピュータ機器 | |
CN113656384B (zh) | 数据处理方法、分布式数据库系统、电子设备及存储介质 | |
CN114741453A (zh) | 数据同步的方法、系统及计算机可读存储介质 | |
CN115373889A (zh) | 数据同步中的数据比对校验及数据修复的方法及装置 | |
CN113420081A (zh) | 数据校验方法、装置、电子设备及计算机存储介质 | |
US11151157B2 (en) | Database management method | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN111045869B (zh) | 一种数据备份方法、装置及可读存储介质 | |
CN112612647A (zh) | 日志并行重演方法、装置、设备及存储介质 | |
CN117131023B (zh) | 数据表处理方法、装置、计算机设备和可读存储介质 | |
CN117874145B (zh) | 一种主从数据库的强一致方法、装置、设备及存储介质 | |
CN112685431B (zh) | 异步缓存方法、装置、系统、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |