CN112199443B - 数据同步方法、装置、计算机设备和存储介质 - Google Patents
数据同步方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN112199443B CN112199443B CN202011062275.XA CN202011062275A CN112199443B CN 112199443 B CN112199443 B CN 112199443B CN 202011062275 A CN202011062275 A CN 202011062275A CN 112199443 B CN112199443 B CN 112199443B
- Authority
- CN
- China
- Prior art keywords
- data
- source
- synchronization
- database
- mode
- 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
-
- 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
- G06F16/2365—Ensuring data consistency and integrity
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据同步方法、装置、计算机设备和存储介质,通过获取源数据库的数据结构以及目标数据库的数据结构;比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。从而大幅提升源数据库到目标数据库的加载效率,保证ETL高效的执行效率。
Description
技术领域
本申请涉及计算机应用技术领域,特别是涉及一种数据同步方法、装置、计算机设备和存储介质。
背景技术
在数据库大量运用的环境下,不同维度的数据可能存储在不同的数据存储介质中,有些产品业务系统需要依赖多维度数据,且这些多维度数据分布在不同产品业务系统的数据存储介质中,因此,在某些需求的情况下,需要将这些多维度数据同步至目标数据仓库中。
传统技术中,在不同产品业务系统之间进行数据同步,主要通过一个产品业务系统的接口从该业务系统的数据存储介质中拉取多维度的数据,进而对多维度的数据进行关联、过滤和聚合操作,以得到目标数据。
然而,传统技术中的数据同步方法,由于产品业务系统的接口会对一次性拉取的最大数据量、筛选条件以及排序条件进行限制,从而导致数据同步的执行效率不高的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高数据同步效率的数据同步方法、装置、计算机设备和存储介质。
一种数据同步方法,所述方法包括:
获取源数据库的数据结构以及目标数据库的数据结构;
比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;
若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;
通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
在其中一个实施例中,在所述比较所述源数据库的数据结构与所述目标数据库的数据结构是否一致之后,所述方法还包括:
若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现。
在其中一个实施例中,在所述获取源数据库的数据结构以及目标数据库的数据结构之前,所述方法还包括:
从所述源数据库中获取源数据表的建表语句;
通过所述建表语句在所述目标数据库中建立目标数据表。
在其中一个实施例中,在所述通过所述建表语句在所述目标数据库中建立目标数据表之前,所述方法还包括:
检测所述目标数据库中是否存在与所述源数据表相同的数据表;
所述通过所述建表语句在所述目标数据库中建立目标数据表,包括:
若不存在,则通过所述建表语句在所述目标数据库中建立目标数据表。
在其中一个实施例中,所述通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务,包括:
通过所述数据同步工具的抽象接口的代码实现,以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务。
在其中一个实施例中,所述以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务,包括:
将所述数据同步任务拆分成若干个第一子任务,从各所述第一子任务中抽取源数据;
将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据;
根据所述源数据主键将所述中间数据拆分为若干个第二子任务;
根据各所述第二子任务,对所述目标数据库进行数据加载。
在其中一个实施例中,所述根据各所述第二子任务,对所述目标数据库进行数据加载,包括:
根据各所述第二子任务的源数据主键查询所述目标数据库,确定各所述第二子任务的类别,所述类别包括新建类别和更新类别;
根据各所述第二子任务的类别,对各所述第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;
根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载。
在其中一个实施例中,所述根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载,包括:
根据所述更新类别数据,对所述目标数据库中对应的数据进行更新;
将所述新建类别数据合并为若干个任务集合,分别将各所述任务集合批量插入所述目标数据库中。
在其中一个实施例中,所述将所述数据同步任务拆分成若干个第一子任务,包括:
获取所述数据同步任务对应的源数据主键的区间范围;
根据所述区间范围,按照预设的并发数量将所述数据同步任务拆分成若干个第一子任务。
在其中一个实施例中,在所述根据各所述第二子任务,对所述目标数据库进行数据加载之后,所述方法还包括:
获取当前时间;
根据获取的当前时间,更新最近一次的数据同步时间。
在其中一个实施例中,所述获取所述数据同步任务对应的源数据主键的区间范围,包括:
根据所述数据同步时间,获取所述数据同步任务对应的源数据主键的区间范围。
在其中一个实施例中,所述在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现,包括:
在所述第一模式下,通过将所述源数据库的数据结构填入模板代码,根据所述源数据库的数据结构生成数据抽取器、数据转换器、数据加载器以及生成器的抽象接口的代码实现。
一种数据同步装置,所述装置包括:
数据结构获取模块,用于获取源数据库的数据结构以及目标数据库的数据结构;
数据结构比较模块,用于比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;
第一代码生成模块,用于若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;
同步任务执行模块,用于通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例中的方法步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例中的方法步骤。
上述数据同步方法、装置、计算机设备和存储介质,通过获取源数据库的数据结构以及目标数据库的数据结构;即通过直接面向数据的方式而非通过产品业务系统的接口进行数据同步,避免产品业务系统的接口对数据同步的限制,从而可以提升数据同步的执行效率;进一步地,比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。这样,在通过直接面向数据的方式以避免通过产品业务系统的接口进行数据同步的基础之上,进一步地针对源数据库的数据结构与目标数据库的数据结构一致的同步场景,通过简单地添加配置即可进行数据同步,从而更进一步地大幅提升源数据库到目标数据库的加载效率,保证ETL高效的执行效率。
附图说明
图1为一个实施例中数据同步方法的应用环境图;
图2a至2b为一个实施例中数据同步方法的流程示意图;
图3为一个实施例中数据同步方法的流程示意图;
图4为一个实施例中数据同步方法的流程示意图;
图5为一个实施例中数据同步方法的流程示意图;
图6为一个实施例中S540步骤的流程示意图;
图7为一个实施例中S630步骤的流程示意图;
图8为一个实施例中S510步骤的流程示意图;
图9为一个实施例中数据同步装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在传统技术中,针对不同的场景,设置多种不同数据结构的数据仓库,用于存储不同维度的数据。当某业务方需要依赖不同业务系统的数据进行分析等操作时,该业务方需要从这些不同数据结构的数据仓库获取详细的数据。一般情况下,一种是通过数据仓库提供的接口获取所需的数据,一种是将多种不同数据结构的数据仓库抽取到目标数据仓库中,从目标数据仓库中获取所需的数据。
示例性地,某公司存在多条产品线,各产品线具有各自的数据存储介质,且各产品线提供通过业务系统的接口访问其他产品线的数据。从维护性上来说这样是比较合适的,因为本产品线的开发是其数据结构的设计者,比较了解本产品线的数据,同时当本产品线的数据发生变更时也能第一时间响应。但是经过分析,发明人发现:直接使用业务系统的接口进行数据同步存在以下问题:
1)业务系统的接口提供方会限制一次允许拉取的最大数据量、筛选、排序条件。
2)为了得到满足需求的数据,业务方往往需要对多维度的数据做关联、过滤和聚合操作。
基于以上分析,在复杂的需求下,通过由各产品线提供业务系统的接口以进行数据同步的执行效率并不高。因此,可以采用直接面向数据的方式,从实现方式和触发时机上来说,一般有两种方式:
1)基于数据库日志的同步,用于数据库主从节点间的数据同步,几乎实时且无需开发编码,只需要增加配置即可。但只能针对源数据库和目标数据库完全一致的场景,在复杂的数据聚合场景中无法使用。
2)自研数据同步(ETL)工具,以定时任务的形式完成源数据的抽取、清洗、转换以及目标数据库的加载。虽然可定制化程度很高,但这些过程都是需要开发编码的,而且维护性成本很高。当抽取的数据源的数据量非常庞大时, ETL工具的执行效率有待提高。
基于此,本申请提供的数据同步方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。终端102向服务器104 发送数据同步请求。响应于接收到的数据同步请求,服务器104获取源数据库的数据结构以及目标数据库的数据结构;比对源数据库的数据结构与目标数据库的数据结构是否一致;若一致,则开启第一模式,在第一模式下,根据源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2a所示,提供了一种数据同步方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
步骤S210,获取源数据库的数据结构以及目标数据库的数据结构。
其中,数据结构是指数据库中数据的组织形式或数据之间的联系,从逻辑的角度观察数据、分析数据得到的数据结构。源数据库是指能直接提供原始数据的数据库,源数据库可以是关系型数据库,也可以是非关系型数据库。源数据库的数量可以是一个,也可以是多个,即可以从单个源数据库中获取待同步的数据,也可以从多个源数据库中获取待同步的数据。目标数据库是指将源数据库中的数据迁移至的新的数据库。若源数据库与目标数据库均为关系型数据库时,数据结构即为数据表的表结构。具体地,源数据库可以部署在与服务器 104网络连接的计算机设备中,而目标数据库部署在服务器104中或者与服务器104网络连接的另一计算机设备中。服务器104从源数据库中读取源数据库的数据结构,从目标数据库中读取目标数据库中的数据结构。
步骤S220,比对源数据库的数据结构与目标数据库的数据结构是否一致。
具体地,在读取到源数据库的数据结构和目标数据库的数据结构之后,将源数据库的数据结构与目标数据库的数据结构进行比对,判断源数据库的数据结构与目标数据库的数据结构是否一致。比如,若源数据库与目标数据库均是关系型数据库,则将从源数据库中获取的表结构与从目标数据库中获取的表结构进行比较,判断两表结构是否一致。
步骤S230,若一致,则开启第一模式,在第一模式下,根据源数据库的数据结构,生成数据同步工具的抽象接口的代码实现。
步骤S240,通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
其中,对于第一模式,源数据库中数据表的数据结构与目标数据库中数据表的数据结构完全一致,属于数据平移。数据同步工具包括数据抽取器 (DataExtract)、数据转换器(DataTransform)、数据加载器(DataLoader)以及生成器(Builder)。
具体地,将源数据库的数据结构与目标数据库的数据结构进行比对,判断源数据库的数据结构与目标数据库的数据结构是否一致。若一致,则开启第一模式,根据源数据库的数据结构生成数据抽取器DataExtract、数据转换器 DataTransform、数据加载器DataLoader以及生成器Builder抽象接口的代码实现,比如,将从源数据中读取到的数据结构填入模板代码中。生成数据同步工具的抽象接口的代码实现之后,加入至数据同步任务集合(TaskGroup)中。通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。在第一模式下,将源数据库的数据结构所对应的数据表平移至目标数据库。需要说明的是,若不能从源数据库中读取到数据表的数据结构,则提示错误。
上述数据同步方法中,通过获取源数据库的数据结构以及目标数据库的数据结构;即通过直接面向数据的方式而非通过产品业务系统的接口进行数据同步,避免产品业务系统的接口对数据同步的限制,从而可以提升数据同步的执行效率;进一步地,比对源数据库的数据结构与目标数据库的数据结构是否一致;若一致,则开启第一模式,在第一模式下,根据源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。这样,在通过直接面向数据的方式以避免通过产品业务系统的接口进行数据同步的基础之上,进一步地针对源数据库的数据结构与目标数据库的数据结构一致的同步场景,通过简单地添加配置即可进行数据同步,从而更进一步地大幅提升源数据库到目标数据库的加载效率,保证ETL高效的执行效率。
在一个实施例中,如图2b所示,在比较源数据库的数据结构与目标数据库的数据结构是否一致之后,该方法还包括:步骤S250,若不一致,则开启第二模式,在第二模式下,采用编码的形式生成数据同步工具的抽象接口的代码实现。
其中,在第二模式下,需要对数据进行筛选和聚合操作。具体地,将源数据库的数据结构与目标数据库的数据结构进行比对,判断源数据库的数据结构与目标数据库的数据结构是否一致。若不一致,则开启第二模式,采用编码的形式生成数据抽取器DataExtract、数据转换器DataTransform、数据加载器 DataLoader以及生成器Builder抽象接口的代码实现。并显式添加到数据同步任务集合(TaskGroup)中,通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。需要说明的是,结合第一模式以及第二模式下数据同步操作的复杂程度,因此可以将第一模式称为简单模式,而第二模式称为复杂模式。
本实施例中,通过比较源数据库的数据结构与目标数据库的数据结构,根据比较结果选择第一模式或者第二模式执行数据同步任务。针对简单模式,简单模式下完成代码的自动生成,且当简单模式的数据表结构发生变更时不需要人为干预,可根据数据表结构生成新的代码。针对复杂模式,由于需要对数据进行筛选操作和聚合操作,则采用通过编码实现数据同步工作的抽象接口的代码实现。针对不同的情形,采用不同模式的数据同步方式,提升数据同步的执行效率,减少代码的开发工作。
在一个实施例中,如图3所示,在获取源数据库的数据结构以及目标数据库的数据结构之前,该方法还包括以下步骤:
步骤S310,从源数据库中获取源数据表的建表语句。
步骤S320,通过建表语句在目标数据库中建立目标数据表。
其中,建表语句是用于创建数据库中的数据表的语句。具体地,服务器从源数据库中获取源数据表的建表语句。且建表语句是用于新建数据表的语句,则服务器根据获取的源数据表的建表语句在目标数据库中建立目标数据表。该目标数据表具有目标数据库的数据结构。
在一个实施例中,如图4所示,在通过建表语句在目标数据库中建立目标数据表之前,该方法还包括:
步骤S410,检测目标数据库中是否存在与源数据表相同的数据表;
通过建表语句在目标数据库中建立目标数据表,包括:
步骤S420,若不存在,则通过建表语句在目标数据库中建立目标数据表。
具体地,从源数据库中获取源数据表的数据结构,根据源数据表的数据结构检测目标数据库中是否已经存在与源数据表相同的数据表。若不存在,则根据获取的源数据表的建表语句在目标数据库中建立目标数据表。目标数据表与源数据表具有相同的数据结构。
在一个实施例中,通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务,包括:通过数据同步工具的抽象接口的代码实现,以责任链模式顺序执行同步任务集合中的各数据同步任务。
其中,责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。具体地,如图5所示,以责任链模式顺序执行同步任务集合中的各数据同步任务,包括以下步骤:
步骤S510,将数据同步任务拆分成若干个第一子任务,从各第一子任务中抽取源数据;
步骤S520,将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据。
步骤S530,根据源数据主键将中间数据拆分为若干个第二子任务。
步骤S540,根据各第二子任务,对目标数据库进行数据加载。
其中,定义数据同步工具ETL(Extract&Transform&Loade)的抽象接口。示例性地,定义数据抽取器的抽象接口具体包括:
定义ETL容器Handler以及建造者模式的Builder抽象接口具体包括:
具体地,数据同步任务可以是需要同步至目标数据库的源数据库中的数据表。为了提升数据同步效率,按照预设的并发数将数据同步任务拆分成若干个第一子任务。通过数据抽取器从各第一子任务中抽取源数据。每个第一子任务分别抽取各自区间中过滤条件命中的数据。在对源数据完成抽取之后,将抽取到的源数据汇集在数据转换器的容器中,在汇集的过程中,对抽取到的源数据进行数据转换和数据聚合操作,得到中间数据。经过数据转换,已经完成对抽取到的源数据的清洗,需要将得到的中间数据加载至目标数据库。为了提升效率,通过数据加载器根据源数据主键将得到的中间数据拆分为若干个并行的第二子任务,比如数据加载器DataLoader将要加载的中间数据根据主键id拆分为 N个并行的第二子任务CheckExist1、CheckExist2...CheckExistN。第二子任务 CheckExist根据主键id集合查询目标数据库。通过数据加载器将各第二子任务 CheckExist加载至目标数据库。
本实施例中,对数据同步的提取和载入过程都做了详细的拆解,融合异步、合并、并行的思想提供数据同步的通用解决方案,从而提升数据同步的提升效率。
在一个实施例中,如图6所示,在步骤S540中,根据各第二子任务,对目标数据库进行数据加载,包括以下步骤:
步骤S610,根据各第二子任务的源数据主键查询目标数据库,确定各第二子任务的类别。
步骤S620,根据各第二子任务的类别,对各第二子任务进行聚合,得到对应的新建类别数据和更新类别数据。
步骤S630,根据新建类别数据和更新类别数据,对目标数据库进行数据加载。
其中,类别包括新建类别和更新类别。新建类别数据是指目标数据库不存在需要创建的数据。更新类别数据是指目标数据库中已经存在需要更新的数据。具体地,通过数据加载器根据源数据主键将得到的中间数据拆分为若干个并行的第二子任务。针对任一第二子任务,数据加载器根据该第二子任务的源数据主键查询目标数据库,若该第二子任务的源数据主键在目标数据库中已存在,则确定该第二子任务的类别为更新类别。若目标数据库中没有该第二子任务的源数据主键,则确定该第二子任务的类别为新建类别。根据各第二子任务的类别,对各第二子任务进行聚合。将新建类别的第二子任务进行聚合,得到对应的新建类别数据,将更新类别的第二子任务进行聚合,得到对应的更新类别数据。从而分别将新建类别数据和更新类别数据分别加载至目标数据库。
本实施例中,对数据加载进行详细的拆解,通过并行的思想执行数据加载,可以进一步地提升数据同步的执行效率。
在一个实施例中,如图7所示,在步骤S630中,根据新建类别数据和更新类别数据,对目标数据库进行数据加载,包括以下步骤:
步骤S710,根据更新类别数据,对目标数据库中对应的数据进行更新。
步骤S720,将新建类别数据合并为若干个任务集合,分别将各任务集合批量插入目标数据库中。
具体地,数据加载器对根据各第二子任务的类别,对各第二子任务进行聚合,得到对应的新建类别数据(BulkCreateList)和更新类别数据(UpdateList)。由于新建类别数据的数据量比较大,为了加快数据加载的速率,对于 BulkCreateList,将其合并成若干个任务集合,比如任务集合Bulk1、任务集合 Buck2...任务集合BuckN,分别将各任务集合批量插入目标数据库中。对于UpdateList,采用单条循环的处理方式,更新目标数据库中对应的数据。
本实施例中,对数据加载进行详细的拆解,针对数据量大的新建类别数据,通过合并的思想执行数据加载,可以进一步地提升数据同步的执行效率。
在一个实施例中,如图8所示,在步骤S510中,将数据同步任务拆分成若干个第一子任务,包括以下步骤:
步骤S810,获取数据同步任务对应的源数据主键的区间范围。
步骤S820,根据区间范围,按照预设的并发数量将数据同步任务拆分成若干个第一子任务。
具体地,按照预设的过滤条件获取数据同步任务对应的源数据主键的区间范围。该过滤条件可以与时间有关。比如,根据数据同步时间,获取数据同步任务对应的源数据主键的区间范围。采用并行的思想进行数据同步,则根据区间范围,按照预设的并发数量将数据同步任务拆分成若干个第一子任务。比如,首先根据过滤条件获取数据同步任务对应源数据主键id的左右区间[L:R],按照设置的并发数对该左右区间做拆分,将一个大的任务拆分成N个并行执行的小任务Task1[L:L1] 、Task2[L1:L2]... TaskN[Ln:R+1] 。可以理解的是,本实施例中的过滤条件可以是数据同步时间。
在一个实施例中,在根据各第二子任务,对目标数据库进行数据加载之后,该方法还包括:获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间(lastTm)。可以理解的是,根据更新后的数据同步时间,获取数据同步任务对应的源数据主键的区间范围。
本实施例中,为了确保增量同步,对数据同步任务的最近一次的数据同步时间进行更新。则在下次进行数据抽取时,可以加入数据更新时间大于lastTm 的条件。
在一个实施例中,提供了一种数据同步方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
步骤S902,从源数据库中获取源数据表的建表语句;
步骤S904,检测目标数据库中是否存在与源数据表相同的数据表;
步骤S906,若不存在,则通过建表语句在目标数据库中建立目标数据表。
目标数据表具有目标数据库的数据结构。
步骤S908,获取源数据库的数据结构以及目标数据库的数据结构。
步骤S910,比对源数据库的数据结构与目标数据库的数据结构是否一致。
步骤S912,若一致,则开启第一模式,在第一模式下,根据源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;
步骤S914,若不一致,则开启第二模式,在第二模式下,采用编码的形式生成数据同步工具的抽象接口的代码实现。
步骤S916,通过数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
具体地,通过数据同步工具的抽象接口的代码实现,以责任链模式顺序执行同步任务集合中的各数据同步任务。
步骤S918,根据数据同步时间,获取数据同步任务对应的源数据主键的区间范围。
步骤S920,根据区间范围,按照预设的并发数量将数据同步任务拆分成若干个第一子任务。
步骤S922,根据源数据主键将中间数据拆分为若干个第二子任务;
步骤S924,根据各第二子任务的源数据主键查询目标数据库,确定各第二子任务的类别。
其中,类别包括新建类别和更新类别;
步骤S926,根据各第二子任务的类别,对各第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;
步骤S928,根据更新类别数据,对目标数据库中对应的数据进行更新;
步骤S930,将新建类别数据合并为若干个任务集合,分别将各任务集合批量插入目标数据库中。
步骤S932,获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间。
应该理解的是,虽然上述流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图9所示,提供了一种数据同步装置900,包括:数据结构获取模块910、数据结构比较模块920、第一代码生成模块930和同步任务执行模块940,其中:
数据结构获取模块910,用于获取源数据库的数据结构以及目标数据库的数据结构;
数据结构比较模块920,用于比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;
第一代码生成模块930,用于若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;
同步任务执行模块940,用于通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
在一个实施例中,该装置还包括第二代码生成模块,用于若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现。
在一个实施例中,该装置还包括建表语句获取模块和数据表新建模块;其中:
建表语句获取模块,用于从所述源数据库中获取源数据表的建表语句;
数据表新建模块,用于通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,该装置还包括数据表检测模块,用于检测所述目标数据库中是否存在与所述源数据表相同的数据表;
数据表新建模块,还用于若不存在,则通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,同步任务执行模块940,还用于通过所述数据同步工具的抽象接口的代码实现,以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务。
在一个实施例中,同步任务执行模块940,还用于将所述数据同步任务拆分成若干个第一子任务,从各所述第一子任务中抽取源数据;将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据;根据所述源数据主键将所述中间数据拆分为若干个第二子任务;根据各所述第二子任务,对所述目标数据库进行数据加载。
在一个实施例中,同步任务执行模块940,还用于根据各所述第二子任务的源数据主键查询所述目标数据库,确定各所述第二子任务的类别,所述类别包括新建类别和更新类别;根据各所述第二子任务的类别,对各所述第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载。
在一个实施例中,同步任务执行模块940,还用于根据所述更新类别数据,对所述目标数据库中对应的数据进行更新;将所述新建类别数据合并为若干个任务集合,分别将各所述任务集合批量插入所述目标数据库中。
在一个实施例中,同步任务执行模块940,还用于获取所述数据同步任务对应的源数据主键的区间范围;根据所述区间范围,按照预设的并发数量将所述数据同步任务拆分成若干个第一子任务。
在一个实施例中,该装置还包括同步时间更新模块,用于获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间。
在一个实施例中,同步任务执行模块940,还用于根据所述数据同步时间,获取所述数据同步任务对应的源数据主键的区间范围。
关于数据同步装置的具体限定可以参见上文中对于数据同步方法的限定,在此不再赘述。上述数据同步装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种数据同步方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取源数据库的数据结构以及目标数据库的数据结构;比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:从所述源数据库中获取源数据表的建表语句;通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:检测所述目标数据库中是否存在与所述源数据表相同的数据表;若不存在,则通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:通过所述数据同步工具的抽象接口的代码实现,以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将所述数据同步任务拆分成若干个第一子任务,从各所述第一子任务中抽取源数据;将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据;根据所述源数据主键将所述中间数据拆分为若干个第二子任务;根据各所述第二子任务,对所述目标数据库进行数据加载。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据各所述第二子任务的源数据主键查询所述目标数据库,确定各所述第二子任务的类别,所述类别包括新建类别和更新类别;根据各所述第二子任务的类别,对各所述第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据所述更新类别数据,对所述目标数据库中对应的数据进行更新;将所述新建类别数据合并为若干个任务集合,分别将各所述任务集合批量插入所述目标数据库中。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述数据同步任务对应的源数据主键的区间范围;根据所述区间范围,按照预设的并发数量将所述数据同步任务拆分成若干个第一子任务。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据所述数据同步时间,获取所述数据同步任务对应的源数据主键的区间范围。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取源数据库的数据结构以及目标数据库的数据结构;比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:从所述源数据库中获取源数据表的建表语句;通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:检测所述目标数据库中是否存在与所述源数据表相同的数据表;若不存在,则通过所述建表语句在所述目标数据库中建立目标数据表。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:通过所述数据同步工具的抽象接口的代码实现,以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:将所述数据同步任务拆分成若干个第一子任务,从各所述第一子任务中抽取源数据;将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据;根据所述源数据主键将所述中间数据拆分为若干个第二子任务;根据各所述第二子任务,对所述目标数据库进行数据加载。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据各所述第二子任务的源数据主键查询所述目标数据库,确定各所述第二子任务的类别,所述类别包括新建类别和更新类别;根据各所述第二子任务的类别,对各所述第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据所述更新类别数据,对所述目标数据库中对应的数据进行更新;将所述新建类别数据合并为若干个任务集合,分别将各所述任务集合批量插入所述目标数据库中。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述数据同步任务对应的源数据主键的区间范围;根据所述区间范围,按照预设的并发数量将所述数据同步任务拆分成若干个第一子任务。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据所述数据同步时间,获取所述数据同步任务对应的源数据主键的区间范围。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory, SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据同步方法,其特征在于,所述方法包括:
获取源数据库的数据结构以及目标数据库的数据结构;
比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;
若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现;
若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现;
通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务;
其中,在所述第一模式下,将源数据库的数据结构所对应的数据表平移至目标数据库;在所述第二模式下,需要对数据进行筛选和聚合操作。
2.根据权利要求1所述的方法,其特征在于,在所述获取源数据库的数据结构以及目标数据库的数据结构之前,所述方法还包括:
从所述源数据库中获取源数据表的建表语句;
检测所述目标数据库中是否存在与所述源数据表相同的数据表;
若不存在,则通过所述建表语句在所述目标数据库中建立目标数据表;所述源数据表与目标数据表具有所述目标数据库的数据结构。
3.根据权利要求1或2任一项所述的方法,其特征在于,所述通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务,包括:
通过所述数据同步工具的抽象接口的代码实现,以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务。
4.根据权利要求3所述的方法,其特征在于,所述以责任链模式顺序执行所述同步任务集合中的各所述数据同步任务,包括:
将所述数据同步任务拆分成若干个第一子任务,从各所述第一子任务中抽取源数据;
将抽取到的源数据汇集在数据转换器进行数据转换和数据聚合操作,得到中间数据;
根据源数据主键将所述中间数据拆分为若干个第二子任务;
根据各所述第二子任务,对所述目标数据库进行数据加载。
5.根据权利要求4所述的方法,其特征在于,所述根据各所述第二子任务,对所述目标数据库进行数据加载,包括:
根据各所述第二子任务的源数据主键查询所述目标数据库,确定各所述第二子任务的类别,所述类别包括新建类别和更新类别;
根据各所述第二子任务的类别,对各所述第二子任务进行聚合,得到对应的新建类别数据和更新类别数据;
根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载;
其中,所述根据所述新建类别数据和所述更新类别数据,对所述目标数据库进行数据加载,包括:
根据所述更新类别数据,对所述目标数据库中对应的数据进行更新;
将所述新建类别数据合并为若干个任务集合,分别将各所述任务集合批量插入所述目标数据库中。
6.根据权利要求4所述的方法,其特征在于,所述将所述数据同步任务拆分成若干个第一子任务,包括:
根据数据同步时间,获取所述数据同步任务对应的源数据主键的区间范围;
根据所述区间范围,按照预设的并发数量将所述数据同步任务拆分成若干个第一子任务;
其中,所述数据同步时间的更新,包括:获取当前时间;根据获取的当前时间,更新最近一次的数据同步时间。
7.根据权利要求1所述的方法,其特征在于,所述在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现,包括:
在所述第一模式下,通过将所述源数据库的数据结构填入模板代码,根据所述源数据库的数据结构生成数据抽取器、数据转换器、数据加载器以及生成器的抽象接口的代码实现。
8.一种数据同步装置,其特征在于,所述装置包括:
数据结构获取模块,用于获取源数据库的数据结构以及目标数据库的数据结构;
数据结构比较模块,用于比对所述源数据库的数据结构与所述目标数据库的数据结构是否一致;
第一代码生成模块,用于若一致,则开启第一模式,在所述第一模式下,根据所述源数据库的数据结构,生成数据同步工具的抽象接口的代码实现,将源数据库的数据结构所对应的数据表平移至目标数据库;
第二代码生成模块,用于若不一致,则开启第二模式,在所述第二模式下,采用编码的形式生成所述数据同步工具的抽象接口的代码实现;其中,在所述第二模式下,所述第二代码生成模块需要对数据进行筛选和聚合操作;
同步任务执行模块,用于通过所述数据同步工具的抽象接口的代码实现,执行同步任务集合中的数据同步任务。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011062275.XA CN112199443B (zh) | 2020-09-30 | 2020-09-30 | 数据同步方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011062275.XA CN112199443B (zh) | 2020-09-30 | 2020-09-30 | 数据同步方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112199443A CN112199443A (zh) | 2021-01-08 |
CN112199443B true CN112199443B (zh) | 2022-11-04 |
Family
ID=74013862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011062275.XA Active CN112199443B (zh) | 2020-09-30 | 2020-09-30 | 数据同步方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199443B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076365B (zh) * | 2021-04-07 | 2024-05-10 | 杭州数梦工场科技有限公司 | 数据同步方法、装置、电子设备及存储介质 |
CN113901141B (zh) * | 2021-10-11 | 2022-08-05 | 京信数据科技有限公司 | 一种分布式数据同步方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542007A (zh) * | 2011-12-13 | 2012-07-04 | 中国电子科技集团公司第十五研究所 | 关系型数据库之间的同步方法及系统 |
WO2017050176A1 (zh) * | 2015-09-25 | 2017-03-30 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和装置 |
CN110727724A (zh) * | 2019-09-09 | 2020-01-24 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 数据抽取方法、装置、计算机设备和存储介质 |
-
2020
- 2020-09-30 CN CN202011062275.XA patent/CN112199443B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542007A (zh) * | 2011-12-13 | 2012-07-04 | 中国电子科技集团公司第十五研究所 | 关系型数据库之间的同步方法及系统 |
WO2017050176A1 (zh) * | 2015-09-25 | 2017-03-30 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和装置 |
CN110727724A (zh) * | 2019-09-09 | 2020-01-24 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 数据抽取方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112199443A (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2017254506B2 (en) | Method, apparatus, computing device and storage medium for data analyzing and processing | |
CN111259643B (zh) | 一种生成图形报表的方法及设备 | |
CN112199443B (zh) | 数据同步方法、装置、计算机设备和存储介质 | |
CN110704476A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN104102881A (zh) | 一种基于内核对象链接关系的内存取证方法 | |
CN116611411A (zh) | 一种业务系统报表生成方法、装置、设备及存储介质 | |
CN113672692B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN111340404A (zh) | 构建指标体系的方法、装置及计算机存储介质 | |
CN111984745B (zh) | 数据库字段动态扩展方法、装置、设备及存储介质 | |
CN111125226B (zh) | 一种配置数据采集方法及装置 | |
CN112559525A (zh) | 数据检查系统、方法、装置和服务器 | |
CN113722337B (zh) | 业务数据确定方法、装置、设备及存储介质 | |
CN107644103B (zh) | 一种可追溯信息来源的信息存储的方法和系统 | |
CN115858322A (zh) | 日志数据处理方法、装置和计算机设备 | |
CN115658750A (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN112148705A (zh) | 数据迁移的方法和装置 | |
CN115454971A (zh) | 数据迁移方法、装置、电子设备及存储介质 | |
CN114297211A (zh) | 一种数据在线分析系统、方法、设备及存储介质 | |
CN117009430A (zh) | 数据管理方法、装置和存储介质及电子设备 | |
CN113377777A (zh) | 数据加载方法、设备、计算机程序产品及存储介质 | |
CN114996307A (zh) | 一种对数据的联邦处理方法及装置 | |
CN112308172B (zh) | 一种识别方法、装置及电子设备 | |
CN111611245B (zh) | 处理数据表的方法和系统 | |
CN115840786B (zh) | 一种数据湖数据同步方法及装置 | |
CN113127549B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |