CN110209728B - 一种分布式异构数据库同步方法、电子设备及存储介质 - Google Patents
一种分布式异构数据库同步方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN110209728B CN110209728B CN201910323215.XA CN201910323215A CN110209728B CN 110209728 B CN110209728 B CN 110209728B CN 201910323215 A CN201910323215 A CN 201910323215A CN 110209728 B CN110209728 B CN 110209728B
- Authority
- CN
- China
- Prior art keywords
- data
- file
- partition
- pieces
- target
- 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
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/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/162—Delete operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
-
- 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/23—Updating
-
- 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/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式异构数据库同步方法,包括首先从源数据表和/或目标数据表中导出数据并生成对应的源数据文件、目标数据文件;当数据全量同步时:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;当数据增量同步时:首先根据系统预设规则分别将源数据文件、目标数据文件划分为多个分区文件;将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件;根据增量文件对目标数据表进行数据表操作,进而实现数据同步。本发明无需考虑数据库类型可实现数据同步,大大提高了数据同步的效率。本发明还提供了一种电子设备及存储介质。
Description
技术领域
本发明涉及数据库,尤其涉及一种分布式异构数据库同步方法、电子设备及存储介质。
背景技术
目前企业主流的数据库包括Oracle、MySQL、Sybase、DB2、Access等,每个数据库都有各自的数据库导入导出工具。每个数据库的自带工具都有特定的使用场景和限制调优,人工参与度较高、操作复杂繁琐,比如用户权限、字符集不通用、时间格式不一样等问题,无法满足数据的时效性、完整性以及准确性;另外,由于每个数据库自身都有自身的定义,因此不同的数据库类型之间也不能够直接进行数据库导入导出。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种分布式异构数据库同步方法,其能够解决现有技术中数据库同步操作繁琐、效率低下等问题。
本发明的目的之二在于提供一种电子设备,其能够解决现有技术中数据库同步操作繁琐、效率低下等问题。
本发明的目的之三在于提供一种计算机可读存储介质,其能够解决现有技术中数据库同步操作繁琐、效率低下等问题。
本发明的目的之一采用如下技术方案实现:
一种分布式异构数据库同步方法,包括数据导出步骤、数据全量同步步骤和数据增量同步步骤,
数据导出步骤:从源数据表中导出源数据生成源数据文件,和/或从目标数据表中导出目标数据生成目标数据文件;
数据全量同步步骤:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;
数据增量同步步骤还包括:
分区步骤:根据系统预设规则分别对源数据文件、目标数据文件进行分区处理划分为多个分区文件;
对比步骤:根据分区号将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出对应的增量文件;
更新步骤:根据每个增量文件对目标数据表进行对应数据表操作,实现目标数据表的数据更新。
进一步地,当目标数据库为oracle和mysql时,导入命令为load和insert 预处理入库命令;所述目标数据库为sybase时,导入命令为insert批量入库命令。
进一步地,根据select查询语句从源数据表中导出源数据;以及根据select 查询语句从目标数据表中导出目标数据。
进一步地,源数据文件、目标数据文件的格式为txt。
进一步地,所述分区步骤还包括:根据系统预设分区数,取源数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;以及根据系统预设分区数,取目标数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;其中哈希公式为:分区号=|主键的哈希值%系统预设分区数|。
进一步地,将源数据文件的分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件的具体过程为:
假设源数据文件的一个分区文件记为A,目标数据文件的一个分区文件记为B,并且分区文件A与分区文件B的分区号相同;
还包括步骤S1:根据分片文件的数据量大小N将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序;以及根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、Bm,并且对每个分片文件的数据按照主键从小到大进行排序;其中,分片文件的数据量大小N是预设的,n=分区文件A的数据量大小/N,m=分区文件B的数据量大小/N;当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数;
步骤S2:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX 条数据并进行排序;以及选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY条数据并进行排序;其中,X=N/n;Y=N/m;1≤X≤N,1≤Y≤ N,X,Y均为自然数;
步骤S3:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比得出对应的增量文件。
进一步地,步骤S3还包括:取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据进行比较,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据;然后重新执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
进一步地,所述增量文件为以下中的任意一种:增加文件、修改文件和删除文件;当增量文件为增加文件时,将增加文件中的数据插入目标数据表中;当增量文件为修改文件时,根据修改文件中的数据更新目标数据表中对应的数据;当增量文件为删除文件时,根据删除文中的数据将目标数据表中对应的数据删除。
本发明的目的之二采用如下技术方案实现:
一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明目的之一所述分布式异构数据库同步方法的步骤。
本发明的目的之三采用如下技术方案实现:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明目的之一所述的分布式异构数据库同步方法的步骤。
相比现有技术,本发明的有益效果在于:
本首先通过将源数据表或目标数据表中的数据读取到本地进行存储,然后当数据全量同步时,直接从本地的文件中将源数据导入到目标数据表中;而当数据增量同步时,同时对本地存储的源数据文件以及目标数据文件划分成对应的分区文件,然后将源数据文件的每个分区文件与目标数据文件中相同分区号的分区文件进行数据对比得出对应的增量文件,最终根据每个增量文件对目标数据表进行数据表操作,实现数据增量同步。本发明能够大大提高数据同步的效率、降低人工参与度、简化了数据导入导出的繁琐操作。
附图说明
图1为本发明提供的数据增量同步时文件分区变化示意图;
图2为本发明提供的数据增量同步的增量变化示意图之一;
图3为本发明提供的数据增量同步的增量变化示意图之二。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
实施例一:
本发明提供的分布式异构数据库同步系统,能够解决跨类型数据库的数据库同步问题,减少了人工参与度、无需考虑用户权限、无需考虑时间格式不一致等问题。比如将用户权限、时间格式不一致等作为参数进行相关配置,可以实现数据库导入导出,减少了复杂繁琐的工作量。本发明目前可支持流行的数据库,比如oracle、mysql、sybase等。
本发明以oracle数据库为例说明现有的数据库导入导出的过程:
比如oracle数据的导入导出的命令行工具为imp和exp,其支持客户端和服务器操作。该导入导出工具是一种很实用的转储工具,特别是体现在小型数据库的转出、表空间的迁移、表的抽取等,但是其使用具有特定的场景和限制条件,比如不适用于大数据库量的操作,导入导出效率不高、人工参与度较高,操作相对复杂繁琐等问题,具体如下:
(1)人工参与度高,例如:
a、人工参与权限的设置:比如将用户A的数据导入用户B下时,用户A 需要有imp-full_database权限;
b、imp和exp适用的字符集不同会导致导入失败,需要人工参与改变Unix 环境变量或者NT注册表的NLS_LANG信息,导完后还要再改回来;
c.使用exp导出的数据不一定imp就能导入,容易碰到imp时提示编码不一致的问题,各种乱码问题需要人工参与调整。
(2)兼容性差不稳定,具体如下:
a.imp和exp版本不能向上兼容,imp可以成功导入低版本exp生成的文件,不能导入高版本exp生成的文件。
b.导入大表(大于80M),容易导致导入失败,因为导出的时候把所有数据压缩在一个数据块上,导入时,如果不存在连续一个大数据块,则会导入失败。
(3)数据无法实现增量更新。
因此,基于上述数据库导入导出存在的缺陷,本发明提供了一种分布式异构数据库同步方法,其不仅能够现有实现数据库全量同步时存在的各种问题,还可以实现数据库增量同步的功能,有效缩短对数据库频繁地插入操作,适用于数据量大但数据变化不大的场景。
本发明首先将数据表中的数据导出,并进行存储,然后再分别实现数据全量同步或数据增量同步。
数据全量同步是指将数据库A中的表的数据迁移到数据库B中的对应表。数据增量同步是指将数据库A中的表和数据库B的对应表中的数据做差异比较后,把增量信息加入到数据库B的对应表中。这里的增量信息一般包括新增数据信息、删除数据信息、修改数据信息。
进一步地,本发明导出数据是通过select查询实现,根据查询语句将源数据表中的数据导出并生成对应的文件。本发明还可通过select查询语句来控制每次导出的数据量,并且还可以针对导出的文件格式进行设置。
比如当一个数据表的数据量较大时,可通过select查询语句每次导出10W 条数据,还可以将导出的文件格式设置为文本文档,便于操作。
由于数据全量同步与数据增量同步是属于不同的操作,因此本文根据不同的数据同步类型,分别进行描述数据同步的过程。
针对数据全量同步:
一般来说,针对oracle和mysql数据库,数据导入时支持load和insert预处理入库;对于sybase数据库,数据导入支持insert批量入库。
在数据库全量同步时,只要指定目标表名,系统自动根据数据库类型生成对应的导入命令,并做相关参数配置,然后将本地存储的源数据文件数据导入到目标数据表中。比如针对oracle数据库,系统自动生成load和insert命令导入数据,并进行相关参数配置,将本地存储的源数据文件导入到目标数据表中。因此,在导入数据时不需要写相应的脚本文件来实现数据导入,实现了跨数据类型的数据同步的问题。
由于本申请中的是首先将源数据表中的数据通过select查询语句导出到文本文档中,然后再将文本文档中的数据导入到对应的目标数据表中。由于针对文本文档导入数据表中,并不会涉及到用户权限、路径、字符集等的问题;同时,系统会根据配置自动处理不同数据库之间时间字段的类型转换,无需人工对时间字段进行转换。
另外,在进行数据导入导出时,只需要在系统中进行简单的配置既可以完成数据的导入导出,不需要另外撰写脚本文件。
再者,本发明是通过select查询将数据首先到出到本地文件,然后再将本地文件使用导入工具,比如load或insert导入到对应的表中,由于本地文件为普通的文本文档的文件,也没有进行压缩处理,因此在导入数据时不存在兼容性的问题,也不存在由于数据不连续块而导致导入失败的问题。
对于数据增量同步来说:
本发明对于数据增量同步采用以下两个技术点:文件分区和排序。其中文件分区是指将大文件分割成小文件,以便提高后续的排序效率;而排序是指外部排序。其中,外部排序是指没有将全部数据一次性都读到内存中进行排序,而是不断地读一部分的文件到内存里排序,直到整个文件有序。这种排序方式适用于不能够一次性将所有的数据读进内存进行处理的大规模文件的排序,通过这种排序方式能够避免内存溢出的问题。
也即是说,首先将源数据表中的数据、以及目标数据表中的数据进行读取,比如通过select查询语句导出并生成对应的文本文件,比如源数据文件、目标数据文件,并将其存储在本地。然后根据分区号选择源数据标文件与目标数据表文件中相同分区号的分区文件进行比较,得出对应的数据差异,进而实现数据增量同步。
对于数据增量同步实现的基本原理如下:
A:首先对源数据文件、目标数据文件进行分区处理。在分区时,根据系统设置的分区数,取每条数据的主键,计算得出每条数据的所属分区。
比如:分区号=|主键的哈希值%分区数|,通过上述公式可以将源数据文件、目标数据文件都分成多个分区文件。
B:对分区后的每个分区文件进行分片处理:
对每个分区文件做进一步分片处理:根据系统设置的分片文件的数据量大小,将每个分区文件分成多个分片文件,并将每个分片文件的数据按照主键从小到大进行排序。
如图1所示,将源数据表、目标数据表的数据通过select查询语句读取并生成源数据文件S1、目标数据文件S2,然后将源数据文件S1、目标数据文件S2 根据系统设置的分区数进行分区分别得出源数据的分区文件1、分区文件2,以及目标数据的分区文件1、分区文件2。然后再根据分片文件的数据量大小N对每个分区文件进行分片处理,比如将源数据的分区文件1划分为分片文件1、分片文件2以及分片文件3。另外,对于分片文件的数据量大小的设定,可根据实际的需求进行设定。例如:一个分区文件有10万条数据,规定每个分片数据量大小为1万条数据,则该分区文件将被分成10个分片文件,并且每个分片文件内的数据都根据主键从小到大进行排序。在排序时,仅仅只是针对分片文件中的数据进行排序,而对于不同分片文件之间的数据并不做排序。
对于排序完成的分片文件,读取每个分片文件的前1000条数据,由于有10 个分片文件,因此最终可取1万条数据,那么这1万条的前1000条数据就是这个分区文件最小的1000条数据。
其依据的原理为:
一个n个元素的有序小集合:s={x|xi≤xj,i,j∈[0,n)},现在我们有m个小集合:s1、s2,…,sm,那么当前所有小集合中的最小值为:min=min(min(s1), min(s2),…,min(sm))。
也即是如果有m个集合,每个集合都有n个元素,那么每个集合都取它最小的那个元素:{min(s1),min(s2),…,min(sm)},那么取出来m个元素中最小的那个元素min,就是这个m个集合中最小的那个元素。
增量同步就是利用了上述集合定理,针对某个分区文件,将该分区文件划分为多个分片文件,在作差异对比时,每次取每个分片文件的前X条数据进行比较,可快速提高数据处理效率,同时也可以避免由于数据量大导致内存溢出的问题出现。也即是:假设对于分区文件1,按照系统预设的分片文件的数据量大小,将分区文件1划分为分片文件1、分片文件2、分片文件3;然后将每个分片文件的所有数据进行从小到大排序。取每个分片文件的前X条数据,最终得出3X条数据,并对这些数据进行排序后再取前X条数据,那么此时的X条数据就是整个分区文件最小的X条数据。其中X的大小不超过设置的分片文件的数据量大小,X=N/分片文件的个数。可通过设置分片文件数据量大小来控制读取到内存的数据量,从而达到避免内存溢出的效果。
因此,对源数据文件以及目标数据文件的相同分区号的分区文件进行分片、排序、取数据的处理,然后再进行差异对比。
也即是:
S1:根据分区号选取源数据文件的分区文件A,并根据分片文件的数据量大小将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序。
步骤S2:选取相同分区号的目标数据文件的分区文件B,并根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、 Bm,并且对每个分片文件的数据按照主键从小到大进行排序。其中,这里的m、 n(注:此处的m,n与前述的m,n指代不一样)均表示分片文件的数量,n=源数据的分区文件数据量大小/N=分区文件A的数据量大小/N,m=目标数据的分区文件数据量大小/N=分区文件B的数据量大小/N。并且,当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数。
步骤S3:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX 条数据并进行排序。其中,X=N/n。
步骤S4:选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY 条数据并进行排序。其中,Y=N/m。1≤X≤N,1≤Y≤N,X,Y均为自然数。
步骤S5:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比。
在对比时,为了保证比较结果的准确性,在做差异对比时,采用如下技术方案:
首先取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据做差异对比,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据,然后重复执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
另外,在比较时,由于数据的大小不一致的情况,比如源数据的X条数据中最大的数据小于目标数据的Y条数据中的数据时,就会导致目标数据的Y条数据中的某条数据得不到比较,例如如图3所示:源数据的N条数据中的前X=3 条数据中有[1,3,5],而目标数据的N条数据的前Y=2条数据为[5,7],此时二者进行比较时,由于源数据的[5]<目标数据的[7],此时,并不清楚源数据中是否存在[7],而源数据的[1,3,5]均进行了比较,而目标数据[5,7]只比较了[5],对于[7]还需要继续比较。因此,将已经比较的数据写入到增量比较结果的文件中,并从内存中删除,也即是将源数据[1,3,5]、目标数据[5]删除即可,然后再选取数据进行比对。在选取数据时,根据源数据[1,3,5]所在源数据的分片文件中的位置取出对应位置的3条数据,同样的取出目标数据的1条数据。由于每条数据来自哪个分片文件的第几行等系统中均有记录,因此,源数据一侧只需要根据已经比较的3条数据的位置来选取对应的分片文件的新的3条数据,并将这新的3条数据与N条数据中剩余数据进行再次排序后,再取出新的前3 条数据;同样的目标数据一侧根据已比较的1条数据的位置来选取对应的分片文件的新的1条数据,并将新的1条数据与N条数据剩余数据进行再次排序后,再取出新的前2条数据;然后将上述源数据的新的前3条数据与目标数据的前2 条数据进行比较;以此类推,直到将相同分区号源数据的分区文件与目标数据的分区文件的每个分片文件的数据均进行比较完毕。
另外,针对每条数据系统均有记录其来自于哪个分区文件、分片文件以及分片文件的第几行第几列的数据,也即是每条数据的位置信息都会在系统中进行记录。
由于数据增量一般存在增加、删除和修改三种情况,如图2所示,因此,源数据表和目标数据表在比较时会产生三种类型的增量文件:增加文件add.txt、修改文件edit.txt、删除文件del.txt,具体为:
假设源数据表为1、目标数据表为2,则:
增加文件add.txt:表1有某个主键,表2没有,则该条数据为新增数据;
修改文件edit.txt:表1和表2都有该主键,其他字段不同,则该条数据需要更新;
删除文件del.txt:表1没有该主键,表2有,则该条数据需要删除。
当分区文件处理完成后,将增加文件add.txt中的数据导入到目标表2中;根据修改文件edit.txt中的数据更新目标数据表2;根据删除文件del.txt中的数据将目标数据表2中的对应数据删除。
另外,针对目标数据的表2的数据更新时,还可以将所有的分区文件均完成后得出的增量文件进行整合后,再根据整合后的增量文件对目标数据表2进行数据更新。
由于对整个数据表进行分区处理,不同分区文件内的数据处理互不影响,因此本发明还可利用多任务同步进行处理将每个分区的数据处理作为一个任务,然后将每个分区的数据处理可以同步进行,实现任务并行,提高同步效率。
本发明主要是利用zookeeper集群来实现任务并行,负载均衡,而且部署在多机器的时候还可以实现容灾的效果。
本发明可以支持不同数据库之间的数据同步,同时还是实现了数据增量同步,大大提高了数据同步的效率、降低了数据同步的操作难度,节省人力物力,解决了现有技术中导入数据时需要重新撰写脚本文件、人工参与度较高、操作繁琐等问题。
实施例二:
本发明还提供了一种分布式异构数据库同步方法,包括以下步骤:包括数据导出步骤、数据全量同步步骤和数据增量同步步骤,
数据导出步骤:从源数据表中导出源数据生成源数据文件,和/或从目标数据表中导出目标数据生成目标数据文件;
数据全量同步步骤:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;
数据增量同步步骤还包括:
分区步骤:根据系统预设规则分别对源数据文件、目标数据文件进行分区处理划分为多个分区文件;
对比步骤:根据分区号将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出对应的增量文件;
更新步骤:根据每个增量文件对目标数据表进行对应数据表操作,实现目标数据表的数据更新。
进一步地,当目标数据库为oracle和mysql时,导入命令为load和insert 预处理入库命令;所述目标数据库为sybase时,导入命令为insert批量入库命令。
进一步地,根据select查询语句从源数据表中导出源数据;以及根据select 查询语句从目标数据表中导出目标数据。
进一步地,源数据文件、目标数据文件的格式为txt。
进一步地,所述分区步骤还包括:根据系统预设分区数,取源数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;以及根据系统预设分区数,取目标数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;其中哈希公式为:分区号=|主键的哈希值%系统预设分区数|。
进一步地,将源数据文件的分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件的具体过程为:
假设源数据文件的一个分区文件记为A,目标数据文件的一个分区文件记为B,并且分区文件A与分区文件B的分区号相同;
还包括步骤S1:根据分片文件的数据量大小N将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序;以及根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、Bm,并且对每个分片文件的数据按照主键从小到大进行排序;其中,分片文件的数据量大小N是预设的,n=分区文件A的数据量大小/N,m=分区文件B的数据量大小/N;当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数;
步骤S2:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX 条数据并进行排序;以及选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY条数据并进行排序;其中,X=N/n;Y=N/m;1≤X≤N,1≤Y≤ N,X,Y均为自然数;
步骤S3:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比得出对应的增量文件。
进一步地,步骤S3还包括:取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据进行比较,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据;然后重新执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
进一步地,所述增量文件为以下中的任意一种:增加文件、修改文件和删除文件;当增量文件为增加文件时,将增加文件中的数据插入目标数据表中;当增量文件为修改文件时,根据修改文件中的数据更新目标数据表中对应的数据;当增量文件为删除文件时,根据删除文中的数据将目标数据表中对应的数据删除。
实施例三:
本发明还提供了一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
数据导出步骤:从源数据表中导出源数据生成源数据文件,和/或从目标数据表中导出目标数据生成目标数据文件;
数据全量同步步骤:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;
数据增量同步步骤还包括:
分区步骤:根据系统预设规则分别对源数据文件、目标数据文件进行分区处理划分为多个分区文件;
对比步骤:根据分区号将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出对应的增量文件;
更新步骤:根据每个增量文件对目标数据表进行对应数据表操作,实现目标数据表的数据更新。
进一步地,当目标数据库为oracle和mysql时,导入命令为load和insert 预处理入库命令;所述目标数据库为sybase时,导入命令为insert批量入库命令。
进一步地,根据select查询语句从源数据表中导出源数据;以及根据select 查询语句从目标数据表中导出目标数据。
进一步地,源数据文件、目标数据文件的格式为txt。
进一步地,所述分区步骤还包括:根据系统预设分区数,取源数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;以及根据系统预设分区数,取目标数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;其中哈希公式为:分区号=|主键的哈希值%系统预设分区数|。
进一步地,将源数据文件的分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件的具体过程为:
假设源数据文件的一个分区文件记为A,目标数据文件的一个分区文件记为B,并且分区文件A与分区文件B的分区号相同;
还包括步骤S1:根据分片文件的数据量大小N将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序;以及根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、Bm,并且对每个分片文件的数据按照主键从小到大进行排序;其中,分片文件的数据量大小N是预设的,n=分区文件A的数据量大小/N,m=分区文件B的数据量大小/N;当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数;
步骤S2:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX 条数据并进行排序;以及选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY条数据并进行排序;其中,X=N/n;Y=N/m;1≤X≤N,1≤Y≤ N,X,Y均为自然数;
步骤S3:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比得出对应的增量文件。
进一步地,步骤S3还包括:取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据进行比较,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据;然后重新执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
进一步地,所述增量文件为以下中的任意一种:增加文件、修改文件和删除文件;当增量文件为增加文件时,将增加文件中的数据插入目标数据表中;当增量文件为修改文件时,根据修改文件中的数据更新目标数据表中对应的数据;当增量文件为删除文件时,根据删除文中的数据将目标数据表中对应的数据删除。
实施例四:
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如文中所述以下步骤:
数据导出步骤:从源数据表中导出源数据生成源数据文件,和/或从目标数据表中导出目标数据生成目标数据文件;
数据全量同步步骤:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;
数据增量同步步骤还包括:
分区步骤:根据系统预设规则分别对源数据文件、目标数据文件进行分区处理划分为多个分区文件;
对比步骤:根据分区号将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出对应的增量文件;
更新步骤:根据每个增量文件对目标数据表进行对应数据表操作,实现目标数据表的数据更新。
进一步地,当目标数据库为oracle和mysql时,导入命令为load和insert 预处理入库命令;所述目标数据库为sybase时,导入命令为insert批量入库命令。
进一步地,根据select查询语句从源数据表中导出源数据;以及根据select 查询语句从目标数据表中导出目标数据。
进一步地,源数据文件、目标数据文件的格式为txt。
进一步地,所述分区步骤还包括:根据系统预设分区数,取源数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;以及根据系统预设分区数,取目标数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;其中哈希公式为:分区号=|主键的哈希值%系统预设分区数|。
进一步地,将源数据文件的分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件的具体过程为:
假设源数据文件的一个分区文件记为A,目标数据文件的一个分区文件记为B,并且分区文件A与分区文件B的分区号相同;
还包括步骤S1:根据分片文件的数据量大小N将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序;以及根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、Bm,并且对每个分片文件的数据按照主键从小到大进行排序;其中,分片文件的数据量大小N是预设的,n=分区文件A的数据量大小/N,m=分区文件B的数据量大小/N;当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数;
步骤S2:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX 条数据并进行排序;以及选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY条数据并进行排序;其中,X=N/n;Y=N/m;1≤X≤N,1≤Y≤ N,X,Y均为自然数;
步骤S3:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比得出对应的增量文件。
进一步地,步骤S3还包括:取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据进行比较,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据;然后重新执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
进一步地,所述增量文件为以下中的任意一种:增加文件、修改文件和删除文件;当增量文件为增加文件时,将增加文件中的数据插入目标数据表中;当增量文件为修改文件时,根据修改文件中的数据更新目标数据表中对应的数据;当增量文件为删除文件时,根据删除文中的数据将目标数据表中对应的数据删除。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
Claims (9)
1.一种分布式异构数据库同步方法,其特征在于:
包括数据导出步骤、数据全量同步步骤和数据增量同步步骤,
数据导出步骤:从源数据表中导出源数据生成源数据文件,和/或从目标数据表中导出目标数据生成目标数据文件;
数据全量同步步骤:根据目标数据库的类型选择对应的导入命令,将源数据文件中的数据导入到对应目标数据表中;
数据增量同步步骤还包括:
分区步骤:根据系统预设规则分别对源数据文件、目标数据文件进行分区处理划分为多个分区文件;
对比步骤:根据分区号将源数据文件的每个分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出对应的增量文件;
更新步骤:根据每个增量文件对目标数据表进行对应数据表操作,实现目标数据表的数据更新;
所述分区步骤还包括:根据系统预设分区数,取源数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;以及根据系统预设分区数,取目标数据文件中每条数据的主键,并根据哈希公式计算得出每条数据的所属分区号;其中哈希公式为:分区号=|主键的哈希值%系统预设分区数。
2.根据权利要求1所述一种分布式异构数据库同步方法,其特征在于,
当目标数据库为oracle和mysql时,导入命令为load和insert预处理入库命令;所述目标数据库为sybase时,导入命令为insert批量入库命令。
3.根据权利要求1所述一种分布式异构数据库同步方法,其特征在于,
根据select查询语句从源数据表中导出源数据;
以及根据select查询语句从目标数据表中导出目标数据。
4.根据权利要求1所述一种分布式异构数据库同步方法,其特征在于,
源数据文件、目标数据文件的格式为txt。
5.根据权利要求1所述一种分布式异构数据库同步方法,其特征在于,
将源数据文件的分区文件与目标数据文件的相同分区号的分区文件中的数据进行比较得出增量文件的具体过程为:
假设源数据文件的一个分区文件记为A,目标数据文件的一个分区文件记为B,并且分区文件A与分区文件B的分区号相同;
还包括步骤S1:根据分片文件的数据量大小N将分区文件A划分为多个分片文件,依次记为:A1、A2、A3、...、An,并且对每个分片文件的数据按照主键从小到大进行排序;
以及根据分片文件的数据量大小将分区文件B划分为多个分片文件,依次记为:B1、B2、B3、...、Bm,并且对每个分片文件的数据按照主键从小到大进行排序;其中,分片文件的数据量大小N是预设的,n=分区文件A的数据量大小/N,m=分区文件B的数据量大小/N;当分区文件A的数据量大小除于N整除时n取商,不能整除时n取商+1;当分区文件B的数据量大小除于N整除时m取商,不能整除时m取商+1;N,n,m均为大于零的自然数;
步骤S2:选取每个分片文件A1、A2、A3、…、An的前X条数据得出N=nX条数据并进行排序;以及选取每个分片文件B1、B2、B3、…、Bm的前Y条数据得出N=mY条数据并进行排序;其中,X=N/n;Y=N/m;1≤X≤N,1≤Y≤N,X,Y均为自然数;
步骤S3:将排序后的源数据的N条数据的前X条数据与排序后的目标数据的N条数据的前Y条数据进行差异对比得出对应的增量文件。
6.根据权利要求5所述一种分布式异构数据库同步方法,其特征在于,
步骤S3还包括:取排序后的源数据的N条数据的前X条数据,以及排序后的目标数据的N条数据的前Y条数据进行比较,以及当比较完成后,根据该X条数据在源数据文件中的位置取出新的数据,根据该Y条数据在目标数据文件中的位置取出新的数据;然后重新执行步骤S3,直到所有的分片文件中的数据全部取出比较完毕后得出对应的增量文件。
7.根据权利要求1所述一种分布式异构数据库同步方法,其特征在于,
所述增量文件为以下中的任意一种:增加文件、修改文件和删除文件;当增量文件为增加文件时,将增加文件中的数据插入目标数据表中;当增量文件为修改文件时,根据修改文件中的数据更新目标数据表中对应的数据;当增量文件为删除文件时,根据删除文中的数据将目标数据表中对应的数据删除。
8.一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:
所述处理器执行所述程序时实现如权利要求1-7中任意一项所述一种分布式异构数据库同步方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:
所述计算机程序被处理器执行时实现如权利要求1-7中任意一项所述一种分布式异构数据库同步方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323215.XA CN110209728B (zh) | 2019-04-22 | 2019-04-22 | 一种分布式异构数据库同步方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910323215.XA CN110209728B (zh) | 2019-04-22 | 2019-04-22 | 一种分布式异构数据库同步方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110209728A CN110209728A (zh) | 2019-09-06 |
CN110209728B true CN110209728B (zh) | 2023-10-20 |
Family
ID=67786190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910323215.XA Active CN110209728B (zh) | 2019-04-22 | 2019-04-22 | 一种分布式异构数据库同步方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110209728B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110955637A (zh) * | 2019-11-27 | 2020-04-03 | 集奥聚合(北京)人工智能科技有限公司 | 一种基于低内存实现超大文件的排序方法 |
CN111143469B (zh) * | 2019-12-27 | 2023-10-20 | 杭州数梦工场科技有限公司 | 一种数据对账方法、装置、电子设备及存储介质 |
CN112000649B (zh) * | 2020-07-07 | 2023-06-27 | 武汉达梦数据库股份有限公司 | 一种基于map reduce的增量数据同步的方法和装置 |
CN112115143B (zh) * | 2020-09-15 | 2024-02-06 | 招商局金融科技有限公司 | 数据自动更新及同步方法、装置、电子设备及存储介质 |
CN112328615A (zh) * | 2020-11-16 | 2021-02-05 | 广州新居网家居科技有限公司 | 数据更新方法、装置、系统、服务器及存储介质 |
CN112380205B (zh) * | 2020-11-17 | 2024-04-02 | 北京融七牛信息技术有限公司 | 一种分布式架构的特征自动生成方法和系统 |
CN112612797B (zh) * | 2020-12-30 | 2022-08-23 | 杭州拼便宜网络科技有限公司 | 多源同表数据加载方法、装置、设备及介质 |
CN112948494A (zh) * | 2021-03-04 | 2021-06-11 | 北京沃东天骏信息技术有限公司 | 数据同步方法、装置、电子设备和计算机可读介质 |
CN113127436B (zh) * | 2021-04-28 | 2023-07-25 | 北京奇艺世纪科技有限公司 | 一种数据同步方法、装置、服务器及存储介质 |
CN114090690A (zh) * | 2021-11-24 | 2022-02-25 | 中国建设银行股份有限公司 | 一种数据同步方法、装置及电子设备 |
CN114356245B (zh) * | 2022-01-12 | 2023-09-22 | 济南点量软件有限公司 | 一种海量文件快速比对更新的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102752372A (zh) * | 2012-06-18 | 2012-10-24 | 天津神舟通用数据技术有限公司 | 一种基于文件的数据库同步方法 |
CN104572672A (zh) * | 2013-10-15 | 2015-04-29 | 北大方正集团有限公司 | 异构数据库的同步方法和应用系统 |
WO2018010527A1 (zh) * | 2016-07-13 | 2018-01-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、系统及存储介质 |
CN108614869A (zh) * | 2018-04-17 | 2018-10-02 | 国家电网公司 | 一种历史数据在不同自动化系统平台同步迁移的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8543539B2 (en) * | 2009-09-16 | 2013-09-24 | Business Objects Software Limited | Method and system for capturing change of data |
CN106997378B (zh) * | 2017-03-13 | 2020-05-15 | 上海摩库数据技术有限公司 | 基于Redis的数据库数据聚合同步的方法 |
-
2019
- 2019-04-22 CN CN201910323215.XA patent/CN110209728B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102752372A (zh) * | 2012-06-18 | 2012-10-24 | 天津神舟通用数据技术有限公司 | 一种基于文件的数据库同步方法 |
CN104572672A (zh) * | 2013-10-15 | 2015-04-29 | 北大方正集团有限公司 | 异构数据库的同步方法和应用系统 |
WO2018010527A1 (zh) * | 2016-07-13 | 2018-01-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、系统及存储介质 |
CN108614869A (zh) * | 2018-04-17 | 2018-10-02 | 国家电网公司 | 一种历史数据在不同自动化系统平台同步迁移的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110209728A (zh) | 2019-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110209728B (zh) | 一种分布式异构数据库同步方法、电子设备及存储介质 | |
CN108153784B (zh) | 同步数据处理方法和装置 | |
CN110292775B (zh) | 获取差异数据的方法及装置 | |
US20150032695A1 (en) | Client and server integration for replicating data | |
CN107977396B (zh) | 一种KeyValue数据库的数据表的更新方法与表数据更新装置 | |
CN113505128B (zh) | 创建数据表的方法、装置、设备及存储介质 | |
CN106528070B (zh) | 一种数据表生成方法及设备 | |
US20160299952A1 (en) | Incremental and collocated redistribution for expansion of online shared nothing database | |
CN107025242A (zh) | 数据库间数据的复制方法及装置 | |
JP2016539449A (ja) | データベース実現方法 | |
CN114780641B (zh) | 多库多表同步方法、装置、计算机设备和存储介质 | |
CN112000649B (zh) | 一种基于map reduce的增量数据同步的方法和装置 | |
CN111143368A (zh) | 一种关系型数据库数据对比方法及系统 | |
CN114722119A (zh) | 数据同步方法及系统 | |
CN105095425A (zh) | 一种数据库的跨库结转方法及装置 | |
CN111522811B (zh) | 数据库的处理方法及装置、存储介质、终端 | |
CN113434482A (zh) | 数据迁移方法、装置、计算机设备及存储介质 | |
CN111680017A (zh) | 一种数据同步的方法及装置 | |
CN110597821B (zh) | 数据仓库表结构变更方法及装置 | |
CN106055582A (zh) | 一种替换数据库的表名的方法及装置 | |
CN116452123A (zh) | 清单项目特征值的生成方法、装置和计算机设备 | |
CN113656384B (zh) | 数据处理方法、分布式数据库系统、电子设备及存储介质 | |
CN113971041A (zh) | 跨版本控制系统的版本同步方法及装置 | |
CN111159020B (zh) | 一种应用于同步软件测试的方法和装置 | |
CN110851515A (zh) | 一种基于Spark分布式环境下的大数据ETL模型执行方法及介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |