背景技术
随着信息技术的发展,云时代的来临,大数据也吸引了越来越多的关注,大数据指的是大小超出常规的数据工具获取、存储、管理和分析能力的数据集,并不是说一定要超过TB值得数据集才能算是大数据。大数据几乎渗透到国民经济的所有部门,应用领域涉及信息服务、智慧城市、金融、制造业、国家安全和科学研究等。从数据计算响应性能角度看,大数据处理可分为实时/准实时与非实时计算,或者是联机计算与离线计算,在一些大型的业务处理系统中,为了提高业务处理速度,一般需要在多地部署机房,不同机房的数据库之间需要保持数据的同步,大数据系统中对数据进行实时/准实时同步是一个困难的课题,目前的大数据同步的方法延时较高、吞吐量较低,且不能接受各种数据源。
申请内容
本申请的一个目的是提供一种数据批处理的方法及设备,解决现有技术中进行大数据处理时的延时高、低吞吐量,不接受各种数据源的问题。
根据本申请的一个方面,提供了一种数据批处理的方法,该方法包括:
判断待批处理数据的处理延时要求是否小于等于预设阈值,
若小于等于,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务;
若大于,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理。
进一步地,上述方法中,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,包括:
将所述待批处理数据转换成统一内部格式;
获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序;
按照依赖关系和对应的依赖顺序将所述转换后的待批处理数据的多个事务进行合并,得到一个或多个组合事务,对每个组合事务进行批处理。
进一步地,所述统一内部格式包括:
数据操作类型、操作地址标识、数据所属的表名、多个数据列,其中,所述数据列包括一个或多个键值。
进一步地,上述方法中,获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序,包括:
获取所述统一内部格式中的键值,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序。
更进一步地,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系,包括以下至少任一项:
根据所述键值中的主键获取在同一数据表内的多个事务之间的依赖关系;
根据所述键值中的外键获取不同数据表之间的多个事务之间的依赖关系;
根据用户自定义及所述键值获取多个事务之间的依赖关系。
进一步地,上述方法中,对每个组合事务进行批处理,包括:
将每个组合事务的更新操作进行拆分,汇总得到每个组合事务内的删除操作和插入操作;
将汇总的每个组合事务内的删除操作和插入操作分别进行批量处理。
进一步地,将汇总每个组合事务内的删除操作和插入操作分别进行批量处理,包括:
将每个组合事务内的删除操作和插入操作分别进行汇总,得到每个组合事务内的删除操作和插入操作;
对每个组合事务内的删除操作进行批处理;
对每个组合事务内的插入操作进行批处理。
进一步地,将汇总每个组合事务内的删除操作和插入操作分别进行批量处理,包括:
将每个组合事务内的删除操作和插入操作进行汇总,得到每个组合事务内的删除操作和插入操作;
根据所述组合事务内的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;
根据所述删除数据库外表,对每个组合事务内的删除操作进行批处理;
根据所述插入数据库外表,对每个组合事务内的插入操作进行批处理。
进一步地,将汇总的每个组合事务内的删除操作和插入操作分别进行批量处理之前或之后,还包括:
通过编程接口及用户自定义转换方式对待批处理数据进行数据转换。
进一步地,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理,包括:
将所述待批处理数据转换成统一内部格式;
将所述转换后的待批处理数据的更新操作进行拆分,得到删除操作和插入操作;
获取所述统一内部格式中的键值,将属于同一键值下的删除操作和插入操作进行合并;
将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。
进一步地,上述方法中,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理,包括:
对所述合并后的属于同一键值下的删除操作和插入操作中的第一个操作和最后一个操作,进行合并的批处理。
进一步地,对所述合并后的属于同一键值下的删除操作和插入操作中的第一个操作和最后一个操作,进行合并的批处理,包括如下至少一项:
若第一个操作为插入操作,且最后一个操作为删除操作,则进行忽略操作的合并处理;
若第一个操作为插入操作,且最后一个操作为插入操作时,将仅执行最后的操作的合并处理;
若第一个操作为删除操作,且最后一个操作为删除操作时,则仅执行一次删除操作的合并处理;
若第一个操作为删除操作,且最后一个操作为插入操作时,则执行删除所述删除操作之后,执行所述最后一个操作的合并处理。
进一步地,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理,包括:
根据合并后的属于同一键值下的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;
根据所述删除数据库外表和插入数据库外表,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。
进一步地,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理之前或之后,还包括:
通过编程接口及用户自定义转换方式对所述待批处理数据进行数据转换。
根据本申请的另一方面,还提供了一种数据批处理的设备,该设备包括:
判断装置,用于判断待批处理数据的处理延时要求是否小于等于预设阈值,
第一批处理装置,用于若小于等于,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务;
第二批处理装置,用于若大于,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理。
进一步地,上述设备中,所述第一批处理装置包括:
第一转换单元,用于将所述待批处理数据转换成统一内部格式;
获取单元,用于获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序;
批量处理单元,用于按照依赖关系和对应的依赖顺序将所述转换后的待批处理数据的多个事务进行合并,得到一个或多个组合事务,对每个组合事务进行批处理。
进一步地,所述统一内部格式包括:
数据操作类型、操作地址标识、数据所属的表名、多个数据列,其中,所述数据列包括一个或多个键值。
进一步地,所述获取单元用于:
获取所述统一内部格式中的键值,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序。
更进一步地,所述获取单元用于以下至少任一项:
根据所述键值中的主键获取在同一数据表内的多个事务之间的依赖关系;
根据所述键值中的外键获取不同数据表之间的多个事务之间的依赖关系;
根据用户自定义及所述键值获取多个事务之间的依赖关系。
进一步地,所述批量处理单元用于:
将每个组合事务的更新操作进行拆分,汇总得到每个组合事务内的删除操作和插入操作;
将汇总的每个组合事务内的删除操作和插入操作分别进行批量处理。
进一步地,所述批量处理单元用于:
将每个组合事务内的删除操作和插入操作分别进行汇总,得到每个组合事务内的删除操作和插入操作;
对每个组合事务内的删除操作进行批处理;
对每个组合事务内的插入操作进行批处理。
进一步地,所述批量处理单元用于:
将每个组合事务内的删除操作和插入操作进行汇总,得到每个组合事务内的删除操作和插入操作;
根据所述组合事务内的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;
根据所述删除数据库外表,对每个组合事务内的删除操作进行批处理;
根据所述插入数据库外表,对每个组合事务内的插入操作进行批处理。
进一步地,所述设备还包括:
第一自定义转换装置,用于通过编程接口及用户自定义转换方式对待批处理数据进行数据转换。
进一步地,所述第二批处理装置包括:
第二转换单元,用于将所述待批处理数据转换成统一内部格式;
拆分单元,用于将所述转换后的待批处理数据的更新操作进行拆分,得到删除操作和插入操作;
汇总单元,用于获取所述统一内部格式中的键值,将属于同一键值下的删除操作和插入操作进行合并;
合并的批处理单元,用于将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。
进一步地,所述合并批处理单元用于:
对所述合并后的属于同一键值下的删除操作和插入操作中的第一个操作和最后一个操作,进行合并的批处理。
更进一步地,所述合并的批处理单元用于如下至少一项:
若第一个操作为插入操作,且最后一个操作为删除操作,则进行忽略操作的合并处理;
若第一个操作为插入操作,且最后一个操作为插入操作时,将仅执行最后的操作的合并处理;
若第一个操作为删除操作,且最后一个操作为删除操作时,则仅执行一次删除操作的合并处理;
若第一个操作为删除操作,且最后一个操作为插入操作时,则执行删除所述删除操作之后,执行所述最后一个操作的合并处理。
进一步地,所述合并的批处理单元用于:
根据合并后的属于同一键值下的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;
根据所述删除数据库外表和插入数据库外表,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。
进一步地,所述设备还包括:
第二自定义转换装置,用于通过编程接口及用户自定义转换方式对所述待批处理数据进行数据转换。
与现有技术相比,本申请通过判断待批处理数据的处理延时要求是否小于等于预设阈值,从而根据不同的场景需求采用不同的数据批处理方案,若小于等于,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务,通过对数据的依赖分析、重排等,最大限度的去除数据依赖,因此同一个组合事务内的所有数据就可以并发批处理,大大提高了数据处理速度,降低了数据处理延时要求;若大于,则将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理,通过只关心合并的批处理,省去了中间的操作,这样减少了操作次数,简化了操作,提高了吞吐量。
进一步地,本申请所述的数据批处理的方法支持各种数据类型,通过提供一种适配器,将每种数据源转换为一种中间格式,数据格式的统一使得后续的处理方式只需一种即可,简化了后续的设计;当待批处理数据的处理延时要求小于等于预设阈值时,获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序,根据建立起来的依赖图对多个事务进行重排,尽可能的消除依赖关系,即将不存在依赖关系的事务进行合并成一个大事务为组合事务,这样一个组合事务内的多个事务因没有依赖关系,可以进行并发处理,加快数据的处理速度。
进一步地,当待批处理数据的处理延时要求大于预设阈值时,将所述待批处理数据转换成统一内部格式,将所述转换后的待批处理数据的更新操作进行拆分,得到删除操作和插入操作,通过以键(key)值归类把数据对应的每条记录的变更历史归集到一起,将属于同一key值下的删除操作和插入操作归集到一起,简化了数据之间的依赖关系,便于后续的数据批量处理的进行;接着,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理,而批处理是根据属于同一个key值下的汇总内的数据的第一个操作和最后一个操作进行合并后的操作标记,按照标记重新以批量处理的方式进行数据处理,从而对数据的处理达到高吞吐的效果。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种数据批处理的方法的流程图;所述方法包括步骤S1、步骤S2和步骤S3,其中,在步骤S1中,判断待批处理数据的处理延时要求是否小于等于预设阈值,从而根据不同的场景需求采用不同的数据批处理方案,当场景需求是对数据实时性要求比较高时,即待批处理数据的处理延时要求小于等于预设阈值时,采用步骤S2中的批处理方案,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务,通过对数据的依赖分析、重排等,最大限度的去除数据依赖,进而,在同一个组合事务内的所有数据就可以并发批处理,大大提高了数据处理速度,降低了数据处理延时要求;当场景需求是高吞吐量,但能容忍比较高的延时的场景时,即待批处理数据的处理延时要求大于预设阈值时,采用步骤S3中的批处理方案,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理,从而所有删除和插入操作在一个事务内完成,通过只关心合并的批处理,省去了中间的操作,这样减少了操作次数,简化了操作,提高了吞吐量。
具体地,在步骤S1中,判断待批处理数据的处理延时要求是否小于等于预设阈值,在此,待批处理数据可以为各种数据源,包括关系数据库、关系数据库的CDC增量文件、CSV文件、XML文件、流数据、Hadoop数据源、MPP数据源、日志等各种结构化、半结构化、非结构化数据以及其他数据源,在本申请的一个优选应用场景为大数据同步系统中,待批处理数据为需要同步的数据,判断大数据同步的延时要求,判断延时要求是否小于或等于预设阈值,根据实际场景中对延时要求的不同选择不同的批处理方案,达到大数据同步的要求。
若小于等于,在步骤S2中,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务;在此,当对待批处理数据的处理延时要求比较低时,即在对数据实时性要求比较高的场景中,例如数据从传统数据库到HBase的同步,需要获取待批处理数据中多个事务的依赖关系和对应的依赖顺序,建立依赖图,利用该依赖图将不存在依赖关系的事务合并成一个大事务,即组成组合事务,对每个组合事务进行批处理,在此,批处理时优选为对每个组合事物进行并行处理,能实现很低的延时性,同时比较高的吞吐率。
若大于,在步骤S3中,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理。在此,当需要高吞吐量,但能容忍比较高的延时场景时,例如在数据仓库领域,每天或者每小时同步一次数据到数据仓库(大数据平台),但是每次同步的数据量是巨大的,每次可达数TB,此时选择步骤S3中的方案是合适的,先将需要同步的数据的更新操作进行拆分,得到删除操作和插入操作,根据键值(key字段)归类将每条数据记录的变更历史归集到一起,便于判断这条数据记录做了哪些修改,修改后的值是什么,从而达到减少数据依赖的目的,对每个汇总后的同一键值对应的数据操作以最终合并的批处理类型进行批量处理,灵活地处理覆盖了所有的操作可能,且只对第一个操作和最后一个操作进行分析得到合并的批处理类型,从而进行批量处理,省去了中间的操作,减少了操作次数,缩短了数据处理时间及大大提高吞吐量,达到高吞吐的目的。
优选地,图2示出根据本申请的一个方面的步骤S2的流程示意图,所述步骤S2包括:步骤S21、步骤S22和步骤S23,在步骤S21中,将所述待批处理数据转换成统一内部格式,在此,所述待批处理数据为输入数据,可以为各种数据类型的数据来自不同的数据源,本申请所述的方法提供一种适配器,用于将每种数据源转换为一种中间格式,数据格式的统一使得后续的处理方式只需一种即可,简化了后续的设计,比如oralce数据库,通过ogg获得增量数据日志,通过为ogg编写一个适配器,使数据格式转换成一种中间格式,方便后续的数据处理,如只需要用一份编码,减少了因数据格式不同需要编写不同类型代码的操作。在步骤S22中,获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序;在此,根据依赖判断规则对转换为统一格式后的数据的多个事务进行依赖分析,建立多个事务之间的依赖关系确定的依赖图,以及对应的依赖顺序,如事务T1、T3依赖事务T0,按照依赖关系进行排序,得到对应的依赖顺序是先是T0,再是T1和T3;在步骤S23中,按照依赖关系和对应的依赖顺序将所述转换后的待批处理数据的多个事务进行合并,得到一个或多个组合事务,对每个组合事务进行批处理,根据建立起来的依赖图对多个事务进行重排,尽可能的消除依赖关系,即将不存在依赖关系的事务进行合并成一个大事务为组合事务,这样一个组合事务内的多个事务因没有依赖关系,可以进行并发处理,加快数据的处理速度,在本申请的一个优选实施例中,如图3示出的依赖图,t1、t3依赖t0,t5依赖t4,t9依赖t6、t8,而t2、t7没有任何依赖、被依赖,根据图3的依赖图中的依赖关系可以调整事务顺序如下:(t0,t2,t4,t6,t7,t8),(t1,t3,t5,t9),把经过调整重排没有依赖关系的多个事务一起组合成一个大事务,大事务之间是有依赖关系的,按照依赖关系的先后顺序进行排序,得到如下的大事务及依赖顺序:(t0,t2,t4,t6,t7,t8)->T0;(t1,t3,t5,t9)->T1,因为T1中的t1、t3依赖T0中的t0,因此对应的依赖顺序是先T0后T1,上述实施例中,t0,t1……t9表示多个不同的事务,T0,T1表示由多个事务确定的组合事务。
优选地,所述统一内部格式包括:数据操作类型、操作地址标识、数据所属的表名、多个数据列,其中,所述数据列包括一个或多个键值。在此,统一内部格式如下:
OP |
TID |
TBL |
Fld1 |
Fld2 |
Fld3 |
Fld4 |
… |
其中,OP表示数据操作类型,例如insert/delete/update;TID表示操作ID(操作地址标识),代表该操作带原数据的操作ID,类似oracle SCN;TBL表示数据所属的表名,Fld1、Fld2、Fld3、Fld4……表示数据库表里各列的数据,数据库每更新一行数据,都会记录这条记录更新前的数据和更新后的数据,Fld就是表示这些数据列,在本申请实施例中所述数据列包括一个或多个key值(键值),一个数据列最多只有一个键值,而多个数据列可以共同一起组成键值组,从而是多个键值。。将各种数据源转换成上述形式的统一内部格式便于后续进行数据批处理时只需要一份code,简化了操作。
优选地,在步骤S22中,获取所述统一内部格式中的键值,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序。在此,根据依赖判断规则确定多个事务之间的依赖关系和对应的依赖顺序,在本申请的一优选实施例中,通过获取统一内部格式中的键值,根据键值预设一个依赖判断规则,进而确定转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序,其中,所述键值包括主键、外键和用户自定义的键,依赖判断规则为利用所述键值的方法仅为一举例,其他现有的或今后可能出现的依赖判断规则如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
更优选地,在步骤S22中,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系,包括以下至少任一项:根据所述键值中的主键获取在同一数据表内的多个事务之间的依赖关系;根据所述键值中的外键获取不同数据表之间的多个事务之间的依赖关系;根据用户自定义及所述键值获取多个事务之间的依赖关系。在此,通过主键定义表内的依赖:表内针对同一key值的多次操作是表内依赖的,例如,用户的银行账户表account,id是key值,则具有相同id的操作是有依赖的,比如用户Alice账号id为1000,所有Alice的账号更新是有依赖的,有严格的交易次序,比如账号新确定后,必须是先存钱才可以进行后续的其他操作,如再取钱,不能变更顺序后先取钱再存钱。通过外键关联定义表间依赖,如B表的主键是A表的外键,则B表主键和A表外键相同的操作是表间依赖的,根据外键的定义,它一定是来源于一个表的主键的值,因此先有主键才能有外键,这样就构成了依赖关系。在一具体实施例中,表A有2列,用a1和a2表示,其中,a1是key;表B有2列,用b1和b2表示,其中,b1是key,b2是外键,对应A表主键a1;事务t0:insert A(1,‘Alice’)
t1:insert B(100,1)
t2:…
t3:update A(1,‘Alice’)->(1,‘Bob’)
通过主键和外键确定的依赖判断规则可获取到的依赖关系为:事务t1通过外键依赖事务t0,事务t3通过主键依赖事务t0。另外,还可以定义用户自定义依赖,比如A表的c1字段依赖B表的c1字段,依赖的规则与通过外键关联定义依赖是一样的,只是通过用户来执行。在本申请中,上述的不同依赖规则之间是可以单独使用也可以一起使用的,互不冲突,通过其中任一种依赖规则获取到的依赖关系,方便后续的将多个事务进行分析、重排的过程,得到最大限度地剔除依赖关系的组合事务。
优选地,步骤S23可以包括将每个组合事务的更新操作进行拆分,汇总得到每个组合事务内的删除操作和插入操作;将汇总的每个组合事务内的删除操作和插入操作分别进行批量处理。在此,本申请所述的数据批处理的方法可以进行数据的批量实现增删改,通过事务管理,生成多个大事务(组合事务),每个组合事务内部的事务没有依赖,把每个事务的更新操作(update)分拆成一条delete和一条insert,例如:update([c1,c2,...]->[c1’,c2’,...])=delete([c1,c2,...])+insert([c1’,2’,...],其中,[c1,c2,……]是指原数据,[c1’,c2’……]是指经过更新操作后的数据结果,delete([c1,c2,...])+insert([c1’,2’,...]是指先删除原有的数据记录,再insert更新后的数据结果,经过delete和insert两个操作可以处理不规则的更新操作,满足多个事务中数据处理的需求,在每个组合事务中将update拆分成一条delete和一条insert后,把所有的delete操作batch起来处理(批量处理),把所有的insert操作batch起来处理,进而提高了数据的处理速度,批量处理比单条处理性能上有数量级提升。
更优选地,步骤S23可以包括将每个组合事务内的删除操作和插入操作分别进行汇总,得到每个组合事务内的删除操作和插入操作;对每个组合事务内的删除操作进行批处理;对每个组合事务内的插入操作进行批处理。在此,当待批处理数据的数据量小时,直接进行delete/insert:
Delete from dstTable where key in(key1,key2,key3,…)
Insert into dstTable values(f00,f01,f02…)values(f10,f11,f12,…)…
上述代码表示,根据key找到对应的表中的操作对象进行delete操作,根据待批处理数据的更新操作信息记录将原数据(f00,f01,f02…)进行delete后插入更新后的结果数据(f10,f11,f12,…)。当待批量处理数据的数据量小时,直接采用上述的insert和deletebatch方式并发地执行数据处理操作,进而大幅度地提高了数据处理的速度,降低了延时时间,在大数据同步的场景中,可以实现低延时的同步使得达到实时/准实时同步的目的。
优选地,在步骤S23中,将每个组合事务内的删除操作和插入操作进行汇总,得到每个组合事务内的删除操作和插入操作;根据所述组合事务内的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;根据所述删除数据库外表,对每个组合事务内的删除操作进行批处理;根据所述插入数据库外表,对每个组合事务内的插入操作进行批处理。在此,当待批处理数据的数据量较大时,先将增量数据建成数据库外表insertTable、deleteTable,其中,增量数据是数据库更新的时候,记录下的更新类型、更新前的原始数据、更新后的结果数据,一般从数据库日志通过OGG、Shareplex等专业软件读取,把增量数据作用在原数据上实现数据的同步,例如,编程代码可以为如下形式:
delete from dstTable where key in(select key from deleteTable);
insert into table dstTable select*from insertTable
当数据量比较大时,利用外表进行处理数据的速度要远比内存中的快,因此,对于大数量,采用本申请所述的建立外表的方法进行批处理提高了处理数据的速度,显著地降低了延时时间。
优选地,在本申请所述的方法中,在步骤S23之前或之后,还包括:步骤S24,通过编程接口及用户自定义转换方式对待批处理数据进行数据转换。在此,用户在对待批处理数据进行处理的过程中可以做各种数据转换,可以通过UDF的方式自定义转换方式,能够扩展数据转换的方法,例如,用户在数据同步的过程中,需要对某些数据列做一个非常复杂的变换:y=f(x),则用户只需按照编程接口(api)进行编程实现f(x)函数,使用的时候:Selectf(x)from src,这样得到的数据即为变换后的数据。在本申请的一应用场景大数据同步的过程中,有些用户需要对数据做一些转换,本申请所述的方法提供一个接口,使得用户可以自己编译一段小程序就能实现所需要的功能,根据需求扩展数据转换的方法,满足用户的特定需求。
图4示出本申请的一优选实施例中的低延时同步方案的模块图;所述低延时同步方案包括数据统一格式模块(Data Format Unifier)、事务处理模块、数据处理模块(DMLGenerator)和大数据平台(Big Data Platform),其中,Data Format Unifier接收各种数据源,包括关系数据库(RDBMS)、关系数据库的CDC增量文件(RDBMS CDC)、CSV文件、XML文件、(flat File)、流数据(Stream)、非结构化数据和其他数据类型,Data Format Unifier根据接收到的数据源类型将其转换成一种内部结构化格式;接着,将转换后的数据进行事务处理,事务处理模块用于事务依赖分析(Transaction Dependency Analyzer)、事务记录(Transaction Recorder)和事务合并(Transaction Merger),Transaction DependencyAnalyzer利用依赖判断规则建立依赖图,Transaction Recorder根据上述建立的依赖图调整事务的顺序,Transaction Merger把经过调整顺序重排的、没有依赖关系的事务一起组合成一个大事务,进行多个事务的合并;需要说明的是,当转换后的数据没有事务信息或者目标不需要事务来保证数据的一致性时,事务处理过程可以略过。经过事务处理后得到合并的大事务,在DML Generator中对合并的大事务进行数据处理,包括数据转换和数据的批量处理,其中,数据转换用于用户在大数据平台上做各种数据转换,通过UDF的方式自定义转换方式;另外,数据的批量处理可以包括批量实现增删改,将update分拆成一条delete和一条insert,把同一个大事务内的所有的delete操作batch起来处理,把所有的insert操作batch起来处理,当同步数据量小时,直接insert/delete,当同步数据量大时,利用外表进行insert/delete;将insert/delete批量处理后的数据同步到大数据平台上,完成数据的同步过程。通过本申请上述低延时同步方案,有以下的特点:能够支持各种数据源,能同时实现全量数据导入和增量数据同步,通过对数据的依赖分析、重排等,最大限度的去除数据依赖;另外,通过用户自定义UDF的方式扩展对数据变换方法;通过低延时同步方案能够将数据批量、快速同步到大数据平台上,实现低延时的效果。
图5示出根据本申请一个方面的步骤S3的流程示意图,所述步骤S3包括步骤S31、步骤S32、步骤S33和步骤S34,在步骤S31中,将所述待批处理数据转换成统一内部格式;在此,所述待批处理数据为输入数据,可以为各种数据类型的数据来自不同的数据源,本申请所述的方法提供一种适配器,用于将每种数据源转换为一种中间格式,数据格式的统一使得后续的处理方式只需一种即可,简化了后续的设计,比如oralce数据库,通过ogg获得增量数据日志,通过为ogg编写一个适配器,使数据格式转换成一种中间格式,方便后续的数据处理,如只需要用一份编码,减少了因数据格式不同需要编写不同类型代码的操作。在步骤S32中,将所述转换后的待批处理数据的更新操作进行拆分,得到删除操作和插入操作;在此,将转换后的待批处理数据的更新操作update分拆成delete和insert,便于根据第一个操作和最后一个操作的操作类型对数据做汇总;在步骤S33中,获取所述统一内部格式中的键值,将属于同一键值下的删除操作和插入操作进行汇总;在此,key值是唯一标识记录的标志,通过以key值归类把数据对应的每条记录的变更历史归集到一起,将属于同一key值下的删除操作和插入操作归集到一起,简化了数据之间的依赖关系,便于后续的数据批量处理的进行;在步骤S34中,将汇总后的属于同一键值下的删除操作和插入操作进行合并的批处理。通过前面汇总的结果将属于同一个key值下的删除操作和插入操作进行合并的批处理,在此,合并的批处理是根据属于同一个key值下的汇总内的数据的第一个操作和最后一个操作进行合并后的操作标记,按照标记重新以批量处理的方式进行数据处理,从而对数据的处理达到高吞吐的效果。
优选地,在步骤S34中,对所述合并后的属于同一键值下的删除操作和插入操作中的第一个操作和最后一个操作,进行合并的批处理。在此,根据第一个操作可以判断要操作的数据对象是否已存在,对第一个操作和最后一个操作的合并可知最终数据对象的结果记录,只利用第一个操作和最后一个操作,省去了中间的操作,减少操作次数进而简化操作步骤及提高需要用的总的数据处理时间。
更优选地,在步骤S34中,包括如下至少一项:若第一个操作为插入操作,且最后一个操作为删除操作,则进行忽略操作的合并处理;若第一个操作为插入操作,且最后一个操作为插入操作时,将仅执行最后的操作的合并处理;若第一个操作为删除操作,且最后一个操作为删除操作时,则仅执行一次删除操作的合并处理;若第一个操作为删除操作,且最后一个操作为插入操作时,则执行删除所述删除操作之后,执行所述最后一个操作的合并处理。在本申请的一优选实施例中,按照key值将每条数据的记录汇总(group)起来,根据第一个操作、最后一个操作在每个group内做如下表格1所示的操作:
第一个操作 |
最后一个操作 |
合并后的操作 |
Insert A |
Delete A’ |
Do nothing |
Insert A |
Insert A’ |
insert last record A’ |
Delete A |
Delete A’ |
delete A |
Delete A |
Insert A’ |
Delete A,然后再insert A’ |
表1
当第一个操作为insert时说明这个数据对象是不存在的,而最后一个操作为delete时,说明该数据对象的操作数据最后也不存在,因此从结果上看,操作之前不存在,操作之后也不存在,相当于什么也没有做(Do nothing),例如,原有的数据为A和B,insert数据C后,再经过一系列的update,最后delete数据C,则这个过程中相当于数据C从来没有出现过。当第一个操作为insert最后一个操作也为insert时,合并后的操作相当于insertlast record,仅执行最后一个操作;当第一个操作为delete,最后一个操作为delete时,合并后的操作为只执行了一次的delete删除操作;当第一个操作为delete最后一个操作为insert时,合并的操作为delete本条记录后,insert最后一条操作的数据;通过以上四种灵活地合并后的操作处理覆盖了所有的操作可能,将每个group内做上述四种操作中任一种后,将对应的操作进行标记,将标记后的数据重新以批量处理的方式来真正的执行,即把所有的delete操作进行batch起来批处理,将所有的insert操作进行batch起来批处理,提高处理效率,数据的多个中间的操作无需再进行batch起来处理,简化了操作及大幅度地提高了吞吐量,适应于高吞吐量的应用需求。需要说明的是,对每个group做上述合并后的操作标记时也可以在此就直接对合并后的操作进行并发的批量处理,此时的效率会相比于先将合并后的操作进行标记,再对标记过后的操作进行重新以批量处理的方式的执行效率低。
更优选地,在步骤S34中,根据合并后的属于同一键值下的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;根据所述删除数据库外表和插入数据库外表,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。在此,数据量较大时,需要建立外表进行批处理操作,根据key值建立数据库外表insertTable、deleteTable,其中,增量数据是数据库更新的时候,记录下的更新类型、更新前的原始数据、更新后的结果数据,进行批处理的编程代码可以为如下形式:
delete from dstTable where key in(select key from deleteTable);
insert into table dstTable select*from insertTable
当数据量比较大时,利用外表进行处理数据的速度要远比内存中的快,因此,对于需要大数量的高吞吐需求时,采用本申请所述的建立外表的方法进行批处理提高了处理数据的速度,显著地降低了延时时间。
优选地,步骤S34之前或之后,还包括:通过编程接口及用户自定义转换方式对所述待批处理数据进行数据转换。在此,用户在对待批处理数据进行处理的过程中可以做各种数据转换,可以通过UDF的方式自定义转换方式,能够扩展数据转换的方法,在本申请的一应用场景大数据同步的过程中,有些用户需要对数据做一些转换,本申请所述的方法提供一个接口,使得用户可以自己编译一段小程序就能实现所需要的功能,根据需求扩展数据转换的方法,满足用户的特定需求。
图6示出本申请的一优选实施例中的高吞吐同步方案的模块图;所述高吞吐同步方案包括数据统一格式模块(Data Format Unifier)、汇总模块(Transaction Merger)、数据处理模块(DML Generator)和大数据平台(Big Data Platform),其中,Data FormatUnifier接收各种数据源,包括关系数据库(RDBMS)、关系数据库的CDC增量文件(RDBMSCDC)、CSV文件、XML文件、(flat File)、流数据(Stream)、非结构化数据和其他数据类型,Data Format Unifier根据接收到的数据源类型将其转换成一种内部结构化格式;接着,将转换后的数据进行数据汇总,Transaction Merger支持把连续的多个事务merger到一起,将update拆分成delete和insert,每个表根据key值group起来,根据第一个操作和最后一个操作在每个group内标记合并后的处理类型,在DML Generator中对标记后的合并处理类型进行数据处理,包括数据转换和数据的批量处理,其中,数据转换用于用户在大数据平台上做各种数据转换,通过UDF的方式自定义转换方式;数据的批量处理包括批量实现增删改,将update分拆成一条delete和一条insert,把同一个汇总内的所有的delete操作batch起来处理,把所有的insert操作batch起来处理,在同步数据量大时,利用外表进行insert/delete;将insert/delete批量处理后的数据同步到大数据平台上,完成数据的同步过程。在此过程中,把delete、insert操作根据键值字段分组,组内合并,把所有的delete操作分一组,insert操作分一组,所有的delete通过delete from table where key in(selectkey from deleteTable)达成,所有的insert操作通过insert into table dstTableselect*from insertTable达成,从而不需要判断各个事物之间的依赖性。通过本申请上述高吞吐同步方案,有以下的特点:能够支持各种数据源,能同时实现全量数据导入和增量数据同步,通过对数据的汇总,省去大量中间操作,提高处理速度;另外,通过用户自定义UDF的方式扩展对数据变换方法;通过高吞吐同步方案能够满足大数据量的吞吐需求,且快速同步到大数据平台上。
图7示出根据本申请另一个方面的一种数据批处理的设备结构示意图;所述设备包括判断装置1、第一批处理装置2和第二批处理装置3,其中,判断装置1用于,判断待批处理数据的处理延时要求是否小于等于预设阈值,从而根据不同的场景需求采用不同的数据批处理方案,当场景需求是对数据实时性要求比较高时,即待批处理数据的处理延时要求小于等于预设阈值时,在第一批处理装置2中进行以下的批处理方案,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务,通过对数据的依赖分析、重排等,最大限度的去除数据依赖,进而,在同一个组合事务内的所有数据就可以并发批处理,大大提高了数据处理速度,降低了数据处理延时要求;当场景需求是高吞吐量,但能容忍比较高的延时的场景时,即待批处理数据的处理延时要求大于预设阈值时,在第二批处理装置3中进行以下的批处理方案,将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行合并,将合并后的所有键值下的删除操作和插入操作分别进行批处理,从而所有删除和插入操作在一个事务内完成,通过只关心合并的批处理,省去了中间的操作,这样减少了操作次数,简化了操作,提高了吞吐量。
具体地,判断装置1,用于判断待批处理数据的处理延时要求是否小于等于预设阈值,在此,待批处理数据可以为各种数据源,包括关系数据库、关系数据库的CDC增量文件、CSV文件、XML文件、流数据、Hadoop数据源、MPP数据源、日志等各种结构化、半结构化、非结构化数据以及其他数据源,在本申请的一个优选应用场景为大数据同步系统中,待批处理数据为需要同步的数据,判断大数据同步的延时要求,判断延时要求是否小于或等于预设阈值,根据实际场景中对延时要求的不同选择不同的批处理方案,达到大数据同步的要求。
若小于等于,第一批处理装置2用于,获取所述待批处理数据中的事务的依赖关系和对应的依赖顺序,将所述待批处理数据中的事务按所述依赖关系和依赖顺序合并成组合事务,对每个组合事务进行批处理,其中,每个组合事务包含一个或多个没有依赖关系的事务;在此,当对待批处理数据的处理延时要求比较低时,即在对数据实时性要求比较高的场景中,例如数据从传统数据库到HBase的同步,需要获取待批处理数据中多个事务的依赖关系和对应的依赖顺序,建立依赖图,利用该依赖图将不存在依赖关系的事务合并成一个大事务,即组成组合事务,对每个组合事务进行批处理,在此,批处理时优选为对每个组合事物进行并行处理,能实现很低的延时性,同时比较高的吞吐率。
若大于,第二批处理装置3,用于将所述待批处理数据的更新操作进行拆分,得到删除操作和插入操作,将属于所述待批处理数据的同一键值下的删除操作和插入操作进行汇总,将汇总后的属于同一键值下的删除操作和插入操作进行合并的批处理。在此,当需要高吞吐量,但能容忍比较高的延时场景时,例如在数据仓库领域,每天或者每小时同步一次数据到数据仓库(大数据平台),但是每次同步的数据量是巨大的,每次可达数TB,此时选择第二批处理装置中的数据批处理的方案是合适的,先将需要同步的数据的更新操作进行拆分,得到删除操作和插入操作,根据键值(key字段)归类将每条数据记录的变更历史归集到一起,便于判断这条数据记录做了哪些修改,修改后的值是什么,从而达到减少数据依赖的目的,对每个汇总后的同一键值对应的数据操作以最终合并的批处理类型进行批量处理,灵活地处理覆盖了所有的操作可能,且只对第一个操作和最后一个操作进行分析得到合并的批处理类型,从而进行批量处理,省去了中间的操作,减少了操作次数,缩短了数据处理时间及大大提高吞吐量,达到高吞吐的目的。
优选地,图8示出根据本申请的另一个方面的第一批处理装置2的结构示意图,所述第一批处理装置2包括:第一转换单元21、获取单元22和批量处理单元23;第一转换单元21将所述待批处理数据转换成统一内部格式,在此,所述待批处理数据为输入数据,可以为各种数据类型的数据来自不同的数据源,本申请所述的设备提供一种适配器,用于将每种数据源转换为一种中间格式,数据格式的统一使得后续的处理方式只需一种即可,简化了后续的设计,比如oralce数据库,通过ogg获得增量数据日志,通过为ogg编写一个适配器,使数据格式转换成一种中间格式,方便后续的数据处理,如只需要用一份编码,减少了因数据格式不同需要编写不同类型代码的操作。获取单元22获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序;在此,根据依赖判断规则对转换为统一格式后的数据的多个事务进行依赖分析,建立多个事务之间的依赖关系确定的依赖图,以及对应的依赖顺序,如事务T1、T3依赖事务T0,按照依赖关系进行排序,得到对应的依赖顺序是先是T0,再是T1和T3;批量处理单元23按照依赖关系和对应的依赖顺序将所述转换后的待批处理数据的多个事务进行合并,得到一个或多个组合事务,对每个组合事务进行批处理,根据建立起来的依赖图对多个事务进行重排,尽可能的消除依赖关系,即将不存在依赖关系的事务进行合并成一个大事务为组合事务,这样一个组合事务内的多个事务因没有依赖关系,可以进行并发处理,加快数据的处理速度,在本申请的一个优选实施例中,如图3示出的依赖图,t1、t3依赖t0,t5依赖t4,t9依赖t6、t8,而t2、t7没有任何依赖、被依赖,根据图3的依赖图中的依赖关系可以调整事务顺序如下:(t0,t2,t4,t6,t7,t8),(t1,t3,t5,t9),把经过调整重排没有依赖关系的多个事务一起组合成一个大事务,大事务之间是有依赖关系的,按照依赖关系的先后顺序进行排序,得到如下的大事务及依赖顺序:(t0,t2,t4,t6,t7,t8)->T0;(t1,t3,t5,t9)->T1,因为T1中的t1、t3依赖T0中的t0,因此对应的依赖顺序是先T0后T1,上述实施例中,t0,t1……t9表示多个不同的事务,T0,T1表示由多个事务确定的组合事务。
优选地,所述统一内部格式包括:数据操作类型、操作地址标识、数据所属的表名、多个数据列,其中,所述数据列包括一个或多个键值。在此,统一内部格式如下:
OP |
TID |
TBL |
Fld1 |
Fld2 |
Fld3 |
Fld4 |
… |
其中,OP表示数据操作类型,例如insert/delete/update;TID表示操作ID(操作地址标识),代表该操作带原数据的操作ID,类似oracle SCN;TBL表示数据所属的表名,Fld1、Fld2、Fld3、Fld4……表示数据库表里各列的数据,数据库每更新一行数据,都会记录这条记录更新前的数据和更新后的数据,Fld就是表示这些数据列,在本申请实施例中所述数据列包括一个或多个key值(键值),一个数据列最多只有一个键值,而多个数据列可以共同一起组成键值组,从而是多个键值。将各种数据源转换成上述形式的统一内部格式便于后续进行数据批处理时只需要一份code,简化了操作。
优选地,获取单元22用于,获取所述统一内部格式中的键值,根据所述键值获取所述转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序。在此,根据依赖判断规则确定多个事务之间的依赖关系和对应的依赖顺序,在本申请的一优选实施例中,通过获取统一内部格式中的键值,根据键值预设一个依赖判断规则,进而确定转换后的待批处理数据中的事务的依赖关系和对应的依赖顺序,其中,所述键值包括主键、外键和用户自定义的键,依赖判断规则为利用所述键值的方法仅为一举例,其他现有的或今后可能出现的依赖判断规则如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
更优选地,获取单元22用于以下至少任一项:根据所述键值中的主键获取在同一数据表内的多个事务之间的依赖关系;根据所述键值中的外键获取不同数据表之间的多个事务之间的依赖关系;根据用户自定义及所述键值获取多个事务之间的依赖关系。在此,通过主键定义表内的依赖:表内针对同一key值的多次操作是表内依赖的,例如,用户的银行账户表account,id是key值,则具有相同id的操作是有依赖的,比如用户Alice账号id为1000,所有Alice的账号更新是有依赖的,有严格的交易次序,比如账号新确定后,必须是先存钱才可以进行后续的其他操作,如再取钱,不能变更顺序后先取钱再存钱。通过外键关联定义表间依赖,如B表的主键是A表的外键,则B表主键和A表外键相同的操作是表间依赖的,根据外键的定义,它一定是来源于一个表的主键的值,因此先有主键才能有外键,这样就构成了依赖关系。在一具体实施例中,表A有2列,用a1和a2表示,其中,a1是key;表B有2列,用b1和b2表示,其中,b1是key,b2是外键,对应A表主键a1;事务t0:insert A(1,‘Alice’)
t1:insert B(100,1)
t2:…
t3:update A(1,‘Alice’)->(1,‘Bob’)
通过主键和外键确定的依赖判断规则可获取到的依赖关系为:事务t1通过外键依赖事务t0,事务t3通过主键依赖事务t0。另外,还可以定义用户自定义依赖,比如A表的c1字段依赖B表的c1字段,依赖的规则与通过外键关联定义依赖是一样的,只是通过用户来执行。在本申请中,上述的不同依赖规则之间是可以单独使用也可以一起使用的,互不冲突,通过其中任一种依赖规则获取到的依赖关系,方便后续的将多个事务进行分析、重排的过程,得到最大限度地剔除依赖关系的组合事务。
优选地,批量处理单元23可以用于,将每个组合事务的更新操作进行拆分,汇总得到每个组合事务内的删除操作和插入操作;将汇总的每个组合事务内的删除操作和插入操作分别进行批量处理。在此,本申请所述的数据批处理的方法可以进行数据的批量实现增删改,通过事务管理,生成多个大事务(组合事务),每个组合事务内部的事务没有依赖,把每个事务的更新操作(update)分拆成一条delete和一条insert,例如:update([c1,c2,...]->[c1’,c2’,...])=delete([c1,c2,...])+insert([c1’,2’,...],其中,[c1,c2,……]是指原数据,[c1’,c2’……]是指经过更新操作后的数据结果,delete([c1,c2,...])+insert([c1’,2’,...]是指先删除原有的数据记录,再insert更新后的数据结果,经过delete和insert两个操作可以处理不规则的更新操作,满足多个事务中数据处理的需求,在每个组合事务中将update拆分成一条delete和一条insert后,把所有的delete操作batch起来处理(批量处理),把所有的insert操作batch起来处理,进而提高了数据的处理速度,批量处理比单条处理性能上有数量级提升。
更优选地,批量处理单元23可以用于:将每个组合事务内的删除操作和插入操作分别进行汇总,得到每个组合事务内的删除操作和插入操作;对每个组合事务内的删除操作进行批处理;对每个组合事务内的插入操作进行批处理。在此,当待批处理数据的数据量小时,直接进行delete/insert:
Delete from dstTable where key in(key1,key2,key3,…)
Insert into dstTable values(f00,f01,f02…)values(f10,f11,f12,…)…
上述代码表示,根据key找到对应的表中的操作对象进行delete操作,根据待批处理数据的更新操作信息记录将原数据(f00,f01,f02…)进行delete后插入更新后的结果数据(f10,f11,f12,…)。当待批量处理数据的数据量小时,直接采用上述的insert和deletebatch方式并发地执行数据处理操作,进而大幅度地提高了数据处理的速度,降低了延时时间,在大数据同步的场景中,可以实现低延时的同步使得达到实时/准实时同步的目的。
优选地,批量处理单元23用于:将每个组合事务内的删除操作和插入操作进行汇总,得到每个组合事务内的删除操作和插入操作;根据所述组合事务内的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;根据所述删除数据库外表,对每个组合事务内的删除操作进行批处理;根据所述插入数据库外表,对每个组合事务内的插入操作进行批处理。在此,当待批处理数据的数据量较大时,先将增量数据建成数据库外表insertTable、deleteTable,其中,增量数据是数据库更新的时候,记录下的更新类型、更新前的原始数据、更新后的结果数据,一般从数据库日志通过OGG、Shareplex等专业软件读取,把增量数据作用在原数据上实现数据的同步,例如,编程代码可以为如下形式:
delete from dstTable where key in(select key from deleteTable);
insert into table dstTable select*from insertTable
当数据量比较大时,利用外表进行处理数据的速度要远比内存中的快,因此,对于大数量,采用本申请所述的建立外表的方法进行批处理提高了处理数据的速度,显著地降低了延时时间。
优选地,在本申请所述的设备中,所述设备还包括:第一自定义转换装置24,用于通过编程接口及用户自定义转换方式对待批处理数据进行数据转换。在此,用户在对待批处理数据进行处理的过程中可以做各种数据转换,可以通过UDF的方式自定义转换方式,能够扩展数据转换的方法,例如,用户在数据同步的过程中,需要对某些数据列做一个非常复杂的变换:y=f(x),则用户只需按照编程接口(api)进行编程实现f(x)函数,使用的时候:Select f(x)from src,这样得到的数据即为变换后的数据。在本申请的一应用场景大数据同步的过程中,有些用户需要对数据做一些转换,本申请所述的设备提供一个接口,使得用户可以自己编译一段小程序就能实现所需要的功能,根据需求扩展数据转换的方法,满足用户的特定需求。
图4示出本申请的一优选实施例中的低延时同步方案的模块图;所述低延时同步方案包括数据统一格式模块(Data Format Unifier)、事务处理模块、数据处理模块(DMLGenerator)和大数据平台(Big Data Platform),其中,Data Format Unifier接收各种数据源,包括关系数据库(RDBMS)、关系数据库的CDC增量文件(RDBMS CDC)、CSV文件、XML文件、(flat File)、流数据(Stream)、非结构化数据和其他数据类型,Data Format Unifier根据接收到的数据源类型将其转换成一种内部结构化格式;接着,将转换后的数据进行事务处理,事务处理模块用于事务依赖分析(Transaction Dependency Analyzer)、事务记录(Transaction Recorder)和事务合并(Transaction Merger),Transaction DependencyAnalyzer利用依赖判断规则建立依赖图,Transaction Recorder根据上述建立的依赖图调整事务的顺序,Transaction Merger把经过调整顺序重排的、没有依赖关系的事务一起组合成一个大事务,进行多个事务的合并;需要说明的是,当转换后的数据没有事务信息或者目标不需要事务来保证数据的一致性时,事务处理过程可以略过。经过事务处理后得到合并的大事务,在DML Generator中对合并的大事务进行数据处理,包括数据转换和数据的批量处理,其中,数据转换用于用户在大数据平台上做各种数据转换,通过UDF的方式自定义转换方式;另外,数据的批量处理可以包括批量实现增删改,将update分拆成一条delete和一条insert,把同一个大事务内的所有的delete操作batch起来处理,把所有的insert操作batch起来处理,当同步数据量小时,直接insert/delete,当同步数据量大时,利用外表进行insert/delete;将insert/delete批量处理后的数据同步到大数据平台上,完成数据的同步过程。通过本申请上述低延时同步方案,有以下的特点:能够支持各种数据源,能同时实现全量数据导入和增量数据同步,通过对数据的依赖分析、重排等,最大限度的去除数据依赖;另外,通过用户自定义UDF的方式扩展对数据变换方法;通过低延时同步方案能够将数据批量、快速同步到大数据平台上,实现低延时的效果。
图9示出根据本申请另一个方面的第二批处理装置的结构示意图,所述第二批处理装置包括第二转换单元31、拆分单元32、汇总单元33和合并的批处理单元34;第二转换单元31将所述待批处理数据转换成统一内部格式;在此,所述待批处理数据为输入数据,可以为各种数据类型的数据来自不同的数据源,本申请所述的设备提供一种适配器,用于将每种数据源转换为一种中间格式,数据格式的统一使得后续的处理方式只需一种即可,简化了后续的设计,比如oralce数据库,通过ogg获得增量数据日志,通过为ogg编写一个适配器,使数据格式转换成一种中间格式,方便后续的数据处理,如只需要用一份编码,减少了因数据格式不同需要编写不同类型代码的操作。拆分单元32将所述转换后的待批处理数据的更新操作进行拆分,得到删除操作和插入操作;在此,将转换后的待批处理数据的更新操作update分拆成delete和insert,便于根据第一个操作和最后一个操作的操作类型对数据做汇总;汇总单元33获取所述统一内部格式中的键值,将属于同一键值下的删除操作和插入操作进行汇总;在此,key值是唯一标识记录的标志,通过以key值归类把数据对应的每条记录的变更历史归集到一起,将属于同一key值下的删除操作和插入操作归集到一起,简化了数据之间的依赖关系,便于后续的数据批量处理的进行;合并的批处理单元34将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。通过前面汇总的结果将属于同一个key值下的删除操作和插入操作进行合并的批处理,在此,合并的批处理是根据属于同一个key值下的汇总内的数据的第一个操作和最后一个操作进行合并后的操作标记,按照标记重新以批量处理的方式进行数据处理,从而对数据的处理达到高吞吐的效果。
优选地,合并的批处理单元34用于,对所述合并后的属于同一键值下的删除操作和插入操作中的第一个操作和最后一个操作,进行合并的批处理。在此,根据第一个操作可以判断要操作的数据对象是否已存在,对第一个操作和最后一个操作的合并可知最终数据对象的结果记录,只利用第一个操作和最后一个操作,省去了中间的操作,减少操作次数进而简化操作步骤及提高需要用的总的数据处理时间。
更优选地,合并的批处理单元34用于如下至少一项:若第一个操作为插入操作,且最后一个操作为删除操作,则进行忽略操作的合并处理;若第一个操作为插入操作,且最后一个操作为插入操作时,将仅执行最后的操作的合并处理;若第一个操作为删除操作,且最后一个操作为删除操作时,则仅执行一次删除操作的合并处理;若第一个操作为删除操作,且最后一个操作为插入操作时,则执行删除所述删除操作之后,执行所述最后一个操作的合并处理。在本申请的一优选实施例中,按照key值将每条数据的记录汇总(group)起来,根据第一个操作、最后一个操作在每个group内做如下表格1所示的操作:
第一个操作 |
最后一个操作 |
合并后的操作 |
Insert A |
Delete A’ |
Do nothing |
Insert A |
Insert A’ |
insert last record A’ |
Delete A |
Delete A’ |
delete A |
Delete A |
Insert A’ |
Delete A,然后再insert A’ |
表1
当第一个操作为insert时说明这个数据对象是不存在的,而最后一个操作为delete时,说明该数据对象的操作数据最后也不存在,因此从结果上看,操作之前不存在,操作之后也不存在,相当于什么也没有做(Do nothing),例如,原有的数据为A和B,insert数据C后,再经过一系列的update,最后delete数据C,则这个过程中相当于数据C从来没有出现过。当第一个操作为insert最后一个操作也为insert时,合并后的操作相当于insertlast record,仅执行最后一个操作;当第一个操作为delete,最后一个操作为delete时,合并后的操作为只执行了一次的delete删除操作;当第一个操作为delete最后一个操作为insert时,合并的操作为delete本条记录后,insert最后一条操作的数据;通过以上四种灵活地合并后的操作处理覆盖了所有的操作可能,将每个group内做上述四种操作中任一种后,将对应的操作进行标记,将标记后的数据重新以批量处理的方式来真正的执行,即把所有的delete操作进行batch起来批处理,将所有的insert操作进行batch起来批处理,提高处理效率,数据的多个中间的操作无需再进行batch起来处理,简化了操作及大幅度地提高了吞吐量,适应于高吞吐量的应用需求。需要说明的是,对每个group做上述合并后的操作标记时也可以在此就直接对合并后的操作进行并发的批量处理,此时的效率会相比于先将合并后的操作进行标记,再对标记过后的操作进行重新以批量处理的方式的执行效率低。
更优选地,合并的批处理单元34用于:根据合并后的属于同一键值下的删除操作和插入操作分别建立对应待删除数据库外表和插入数据库外表;根据所述删除数据库外表和插入数据库外表,将合并后的属于同一键值下的删除操作和插入操作分别进行批处理。在此,数据量较大时,需要建立外表进行批处理操作,根据key值建立数据库外表insertTable、deleteTable,其中,增量数据是数据库更新的时候,记录下的更新类型、更新前的原始数据、更新后的结果数据,进行批处理的编程代码可以为如下形式:
delete from dstTable where key in(select key from deleteTable);
insert into table dstTable select*from insertTable
当数据量比较大时,利用外表进行处理数据的速度要远比内存中的快,因此,对于需要大数量的高吞吐需求时,采用本申请所述的建立外表的方法进行批处理提高了处理数据的速度,显著地降低了延时时间。
优选地,所述设备还包括:第二自定义转换装置,用于通过编程接口及用户自定义转换方式对所述待批处理数据进行数据转换。在此,用户在对待批处理数据进行处理的过程中可以做各种数据转换,可以通过UDF的方式自定义转换方式,能够扩展数据转换的方法,在本申请的一应用场景大数据同步的过程中,有些用户需要对数据做一些转换,本申请所述的设备提供一个接口,使得用户可以自己编译一段小程序就能实现所需要的功能,根据需求扩展数据转换的方法,满足用户的特定需求。需要说明的是,本申请所述的设备中第一自定义转换装置与第二自定义转换装置相同或相似。
图6示出本申请的一优选实施例中的高吞吐同步方案的模块图;所述高吞吐同步方案包括数据统一格式模块(Data Format Unifier)、汇总模块(Transaction Merger)、数据处理模块(DML Generator)和大数据平台(Big Data Platform),其中,Data FormatUnifier接收各种数据源,包括关系数据库(RDBMS)、关系数据库的CDC增量文件(RDBMSCDC)、CSV文件、XML文件、(flat File)、流数据(Stream)、非结构化数据和其他数据类型,Data Format Unifier根据接收到的数据源类型将其转换成一种内部结构化格式;接着,将转换后的数据进行数据汇总,Transaction Merger支持把连续的多个事务merger到一起,将update拆分成delete和insert,每个表根据key值group起来,根据第一个操作和最后一个操作在每个group内标记合并后的处理类型,在DML Generator中对标记后的合并处理类型进行数据处理,包括数据转换和数据的批量处理,其中,数据转换用于用户在大数据平台上做各种数据转换,通过UDF的方式自定义转换方式;数据的批量处理包括批量实现增删改,将update分拆成一条delete和一条insert,把同一个汇总内的所有的delete操作batch起来处理,把所有的insert操作batch起来处理,在同步数据量大时,利用外表进行insert/delete;将insert/delete批量处理后的数据同步到大数据平台上,完成数据的同步过程。在此过程中,把delete、insert操作根据键值字段分组,组内合并,把所有的delete操作分一组,insert操作分一组,所有的delete通过delete from table where key in(selectkey from deleteTable)达成,所有的insert操作通过insert into table dstTableselect*from insertTable达成,从而不需要判断各个事物之间的依赖性。通过本申请上述高吞吐同步方案,有以下的特点:能够支持各种数据源,能同时实现全量数据导入和增量数据同步,通过对数据的汇总,省去大量中间操作,提高处理速度;另外,通过用户自定义UDF的方式扩展对数据变换方法;通过高吞吐同步方案能够满足大数据量的吞吐需求,且快速同步到大数据平台上。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。