分布式数据同步到数据仓库的方法及装置
技术领域
本申请涉及数据存储领域,尤其涉及一种分布式数据同步到数据仓库的方法及装置。
背景技术
数据库(Data-Base,DB)是按照某种数据模型组织的数据集合,该数据集合的数据结构独立于使用它的应用程序;数据库是面向事务设计的,是生产系统的数据平台,一般存储在线交易数据。数据仓库(Data Warehouse,DW)是集成的(Integrated)、相对稳定的(Non-volatile)、反映历史变化(Time Variant)的数据集合;数据仓库是面向主题(Subject Oriented)设计的,是分析系统的数据平台,一般存储历史数据。
生产系统的数据库在访问量和存储的数据量越来越大的情况下,采取了将现有集中式数据库升级为分布式数据库的解决方案。集中式数据库是指数据库软件部署在一台存储服务器中,相应的,数据存储在集中式数据库的一个表中(本申请文件中,将集中式数据库中的一个表称为大表);分布式数据库是指数据库软件部署在多台独立的存储服务器中,相应的,集中式数据库的大表中存储的全部数据按照特定的分表规则划分到分布式数据库的多个表中(本申请文件中,将分布式数据库中的多个表称为分表),也就是说分布式数据库将一个逻辑表中的数据分布到多个物理表中。
生产系统通过采用分布式数据库降低了对单台存储服务器的软硬件要求,但是在数据仓库的ETL(Extraction-Transformation-Loading,数据抽取、转换和装载)过程中,数据库中的数据同步到数据仓库的流程会发生巨大的变化。ETL是数据仓库中的重要环节,负责将分布式、异构数据源中的数据抽取到临时中间层,进行清洗、转换、集成,最后装载到数据仓库中,成为联机分析处理、数据挖掘的基础。常用的ETL工具包括Informatica、Datastage、OWB、DTS等。在采用集中式数据库的情况下,只需将集中式数据库的大表中的数据同步到数据仓库的一个表中即可,而在采用分布式数据库的情况下,针对每一个分表在数据仓库中建立对应的表(本申请文件中,将数据仓库中为各分表对应建立的表称为映射表),首先将生产系统中各分表的数据导出为文本,然后导入到数据仓库对应的映射表中,最后将数据仓库各映射表中的数据合并到一个表中(本申请文件中,将数据仓库中数据合并到的表称为汇总表)。
在分布式数据库的规模较大,也就是分表的数量较多的情况下,例如有的大表会分成1024个分表,将导致数据仓库中表的数量暴涨,使得数据仓库中表的维护数量和难度比较大,而且在同步流程中需要对数据仓库中所有的映射表进行合并操作,过程繁杂,使得同步流程耗费的时间较长,极易出错。可见,现有分布式数据同步到数据仓库的方案,数据仓库中表的维护数量和难度较大,同步流程复杂,耗费时间长,可靠性低,成为数据仓库的ETL过程的瓶颈。
申请内容
本申请提供一种分布式数据同步到数据仓库的方法及装置,用以解决现有技术提供的方案中,数据仓库中表的维护数量和难度较大,同步流程复杂,耗费时间长,可靠性低的问题。
本申请提供的分布式数据同步到数据仓库的方法,所述方法包括:
将分布式数据库的每一个分表中的增量数据导出为文本,并对应生成文本文件;
将各文本文件中的文本导入到数据仓库的增量表中;
根据特定的分表规则将增量表中的全部增量数据合并到数据仓库的汇总表中,所述分表规则是指将集中式数据库的大表中存储的全部数据划分到分布式数据库的多个分表中时所遵循的规则。
本申请提供的分布式数据同步到数据仓库的装置,所述装置包括导出单元、导入单元和汇总单元,其中:
所述导出单元,用于将分布式数据库的每一个分表中的增量数据导出为文本,并对应生成文本文件;
所述导入单元,用于将各文本文件中的文本导入到数据仓库的增量表中;
所述汇总单元,用于根据特定的分表规则将增量表中的全部增量数据合并到数据仓库的汇总表中,所述分表规则是指将集中式数据库的大表中存储的全部数据划分到分布式数据库的多个分表中时所遵循的规则。
本申请提供的分布式数据同步到数据仓库的方法及装置,数据仓库的ETL过程中,将每一个分表中的增量数据导出为文本,再将文本直接导入到增量表中,最后将增量表中的全部增量数据合并到汇总表,彻底摒弃了在数据仓库中为全部分表建立对应数量的映射表的同步流程,同步任务只需在数据仓库中新建两个表(增量表和汇总表)即完成数据同步,省略了同步流程中的冗余操作,降低了耗费的时间,提升了同步效率和可靠性。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本申请实施例中分布式数据同步到数据仓库的方法流程图;
图2为本申请实施例中分布式数据同步到数据仓库的示意图;
图3为本申请实施例中分布式数据同步到数据仓库的装置框图。
具体实施方式
本申请实施例为了解决现有ETL过程中分布式数据同步到数据仓库的方案中存在的问题,提供了一种分布式数据同步到数据仓库的方案。假设分布式数据库中将一个大表按照特定的分表规则划分为1024个分表,按照现有方案,需要在数据仓库中对应建立1024个映射表,并且需要将各映射表中的数据合并到汇总表中,使得表的维护数量和难度较大,同步流程复杂,耗费时间长,可靠性低。针对上述问题,本申请实施中提出:只在数据仓库中建立两个表,分别称为增量表和汇总表,将分布式数据库的每一个分表中的增量数据导出为文本,并对应生成文本文件,将各文本文件中的文本导入到数据仓库的增量表中,根据该特定的分表规则将增量表中的全部增量数据合并到数据仓库的汇总表中,从而省略同步流程中的冗余操作,降低耗费的时间,提升同步效率和可靠性。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
如图1所示,本申请实施例首先提供了一种分布式数据同步到数据仓库的方法,包括如下步骤:
S101、将分布式数据库的每一个分表中的增量数据导出为文本,并对应生成文本文件。
在分布式数据库的每一个分表中,数据以记录的方式进行存储,集中式数据库的大表中存储的全部数据按照特定的分表规则划分到分布式数据库的多个分表中,具体实施中,需要确保每个数据是可以唯一标识的,即由全局唯一的数据标识(key)进行区分。基于此,分布式数据库的每一个分表中的每一条记录除了包括自动生成的数据编号、以及数据之外,还包括根据该数据在大表中的位置和分表规则为该数据分配的全局唯一的数据标识。
将分布式数据库的每一个分表中的增量数据导出为文本时,为了提升导出速度,可以采用并行导出的方式,当然也可以采用串行导出的方式。
具体实施中,将分布式数据库的每一个分表中的增量数据导出为文本时,还携带各增量数据的全局唯一的数据标识,便于后续将增量数据汇总到汇总表中。
举例说明如何将集中式数据库的大表中存储的全部数据按照特定的分表规则划分到分布式数据库的多个分表中。假设集中式数据库的某大表中存储有如下记录,各条记录的数据及数据格式如表1所示:
表1
数据编号 |
用户名 |
账户余额 |
1 |
AAA |
100元 |
2 |
BBB |
150元 |
3 |
CCC |
200元 |
4 |
DDD |
300元 |
将大表按照特定的分表规则(例如按照数据编号的奇偶性进行划分的规则)将大表中存储的全部数据划分到两个分表中,则两个分表中存储的各条记录以及存储格式分别如表2和表3所示。其中,全局唯一的数据标识A1可以表示是奇数表中的第1条记录,根据分表规则,可以确定对应的数据在大表中的位置(数据编号为1);全局唯一的数据标识A2可以表示是奇数表中的第2条记录,根据分表规则,可以确定对应的数据在大表中的位置(数据编号为3);全局唯一的数据标识B1可以表示是偶数表中的第1条记录,根据分表规则,可以确定对应的数据在大表中的位置(数据编号为2);全局唯一的数据标识B2可以表示是偶数表中的第2条记录,根据分表规则,可以确定对应的数据在大表中的位置(数据编号为4)。
表2
数据编号 |
用户名 |
账户余额 |
全局唯一的数据标识 |
修改时间/修改标志位 |
1 |
AAA |
100元 |
A1 |
|
2 |
CCC |
200元 |
A2 |
|
表3
数据编号 |
用户名 |
账户余额 |
全局唯一的数据标识 |
修改时间/修改标志位 |
1 |
BBB |
150元 |
B1 |
|
2 |
DDD |
300元 |
B2 |
|
下面对所述的增量数据及其确定方法进行说明,增量数据是指在一定时间段内发生了变化的数据。分布式数据库的每一个分表中的每一条记录还可以包括修改时间,具体实施中,可以判断一条记录的修改时间是否在上一次的增量数据导出时间点到本次的增量数据导出时间点之间的时间段内,如果“是”,则确定该条记录所包括的数据为增量数据,如果“否”,则确定该条记录所包括的数据不为增量数据;也就是说,增量数据是指修改时间在上一次的增量数据导出时间点到本次的增量数据导出时间点之间的时间段内的各条记录所包括的数据。举例进行说明,假设同一天内上一次的增量数据导出时间点为8:00,本次的增量数据导出时间点为20:00,如果一条记录的修改时间为11:30,确定该条记录所包括的数据为增量数据,如果一条记录的修改时间为7:30,确定该条记录所包括的数据不为增量数据。
进一步,还可以为分布式数据库的每一个分表中的每一条记录增加修改标志位,具体实施中,修改标志位占用1bit即可。在每一次增量数据导出之后,各分表中每一条记录的修改标志位初始化设置为初始值(例如初始值为“0”);当任一记录的数据内容被修改时,该条记录的修改标志位设置为设定值(例如设定值为“1”)。也就是说,在当前次增量数据导出之后,将各分表中每一条记录的修改标志位初始化设置为初始值,在当前次增量数据导出时间点至下一次增量数据导出时间点之间的时间段内,当任一记录的数据被修改时,如果该条记录当前的修改标志位为初始值,则将该条记录的修改标志位从初始值更新为设定值,如果该条记录当前的修改标志位已经被设置为设定值,则该条记录的修改标志位的取值不变。具体实施中,还可以判断一条记录的修改标志为是否为设定值,如果“是”,则确定该条记录所包括的数据为增量数据,如果“否”,则确定该条记录所包括的数据不为增量数据;也就是说,增量数据是指修改标志位为设定值的各条记录所包括的数据。
增量数据的导出过程中,为分布式数据库中的每一个分表中的增量数据对应生成一个文本文件,将每一个分表中的增量数据导出为文本时,将导出的文本中所包括的设定的分隔符替换为空格,该替换操作可以避免后续导入文本到数据仓库的增量表中时操作出错,而且不会影响原有文本的语义。所述设定的分隔符包括ASCII码小于32的不可见字符,从而保证分隔符被替换后不会影响原有文本的语义,常用的分隔符例如为Tab(制表)键、回车键等。
S102、将各文本文件中的文本导入到数据仓库的增量表中。
S103、根据设定的分表规则将增量表中的全部增量数据合并到数据仓库的汇总表中。
具体实施中,根据分表规则、以及增量表中每一个增量数据对应的全局唯一的数据标识,确定每一个增量数据在大表中的位置;
根据每一个增量数据在大表中的位置,即可将各增量数据合并到汇总表的对应位置处。
下面举例说明分布式数据同步到数据仓库的具体流程。如图2所示,假设分布式数据库中包括N个分表,分别为Table1、Table2、Table3...TableN,需要说明的是,并不要求所有分表均在不同的存储服务器上,也就是说Table1和Table2可以在同一物理存储服务器上;将每一个分表中的增量数据导出为文本,并对应生成文本文件,也就是说每一个分表对应一个文本文件,分别为Table1对应文本文件t1.txt、Table2对应文本文件t2.txt、Table3对应文本文件t3.txt...TableN对应文本文件tN.txt;在数据仓库中建立增量表Table_delta和汇总表Table_gather。分布式数据同步到数据仓库的过程中,首先每一个分表中的增量数据导出为文本,并对应生成文本文件,即Table1中的增量数据导出为文本并对应生成t1.txt,Table2中的增量数据导出为文本并对应生成t2.txt...TableN中的增量数据导出为文本并对应生成tN.txt,将每一个分表中的增量数据导出为文本时,还携带各增量数据的全局唯一的数据标识;接着,将各文本文件中的文本导入到数据仓库的增量表中,即t1.txt、t2.txt...tN.txt中的文本导入到Table_delta中;最后,根据分表规则、以及每一个增量数据的全局唯一的数据标识,将增量表中的全部增量数据合并到数据仓库的汇总表中,也就是将Table_delta中的全部增量数据合并到Table_gather的相应位置处。
可见,数据仓库中的汇总表对应分布式数据库各分表中的全部数据,数据仓库中的增量表对应分布式数据库各分表中一段时间内的全部增量数据。
基于同一技术构思,本申请实施例提供了一种分布式数据同步到数据仓库的装置,该装置可以设置在部署了数据仓库的服务器中,也可以设置在单独的服务器中。如图3所示,该装置包括导出单元301、导入单元302和汇总单元303,其中:
导出单元301,用于将分布式数据库的每一个分表中的增量数据导出为文本,并对应生成文本文件;
导入单元302,用于将各文本文件中的文本导入到数据仓库的增量表中;
汇总单元303,用于根据特定的分表规则将增量表中的全部增量数据合并到数据仓库的汇总表中,所述分表规则是指将集中式数据库的大表中存储的全部数据划分到分布式数据库的多个分表中时所遵循的规则。
具体实施中,导出单元301,具体用于将分布式数据库的每一个分表中的增量数据导出为文本时,还携带各增量数据的全局唯一的数据标识,所述分布式数据库的每一个分表中的每一条记录包括数据、以及根据该数据在大表中的位置和所述分表规则为该数据分配的全局唯一的数据标识。
具体实施中,导出单元301可以采取如下确定增量数据的方式,其中一种方式的实施要求分布式数据库的每一个分表中的每一条记录还包括修改时间,在这种情况下,导出单元301,具体用于将修改时间在上一次的增量数据导出时间点到本次的增量数据导出时间点之间的时间段内的各条记录所包括的数据确定为数据增量。
另一种方式的实施要求分布式数据库的每一个分表中的每一条记录还包括修改标志位,同时要求分布式数据同步到数据仓库的装置还包括设置单元304,用于在导出单元301每一次导出增量数据之后,将各分表中每一条记录的修改标志位初始化设置为初始值,当任一记录的数据内容被修改时,将该条记录的修改标志位设置为设定值;在这种情况下,导出单元301,具体用于将修改标志位为设定值的各条记录所包括的数据确定为增量数据。
具体实施中,导入单元302,还用于在导出单元301将每一个分表中的增量数据导出为文本之后,将导出的文本中所包括的设定的分隔符替换为空格。
汇总单元303具体可以包括确定子单元和合并子单元,其中:
确定子单元,用于根据特定的分表规则、以及增量表中每一个增量数据对应的全局唯一的数据标识,确定每一个增量数据在大表中的位置;
合并子单元,用于根据每一个增量数据在大表中的位置,将各增量数据合并到所述汇总表的对应位置处。
本申请实施例提供的分布式数据同步到数据仓库的方法及装置,数据仓库的ETL过程中,将每一个分表中的增量数据导出为文本,再将文本导入到增量表中,最后将增量表中的全部增量数据合并到汇总表,彻底摒弃了在数据仓库中为全部分表建立对应数量的映射表的同步流程,同步任务只需在数据仓库中新建两个表(增量表和汇总表)即完成数据同步,省略了同步流程中的冗余操作,降低了耗费的时间,提升了同步效率和可靠性。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。