CN110309122A - 获取增量数据的方法、装置、服务器和存储介质 - Google Patents
获取增量数据的方法、装置、服务器和存储介质 Download PDFInfo
- Publication number
- CN110309122A CN110309122A CN201810265132.5A CN201810265132A CN110309122A CN 110309122 A CN110309122 A CN 110309122A CN 201810265132 A CN201810265132 A CN 201810265132A CN 110309122 A CN110309122 A CN 110309122A
- Authority
- CN
- China
- Prior art keywords
- version
- target
- tuple
- snapshot
- data
- 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.)
- Granted
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种获取增量数据的方法、装置、服务器和存储介质,属于数据处理技术领域。方法包括:接收数据获取指令,所述数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。本发明在获取增量数据时,不需要在数据库中建立触发器,从而避免了对数据库的侵入,提高了系统性能。并且,本发明可以获取任意目标历史时间段内的增量数据,提高了灵活性。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种获取增量数据的方法、装置、服务器和存储介质。
背景技术
在数据处理系统中,尤其是OLAP(On line Transaction Processing,联机事务处理)系统、数据仓库、大数据分析等场景中,经常需要从数据库中获取数据,然后对获取的数据进行分析处理。由于业务可能是不断更新的,因此,数据分析要基于老数据和更新的增量数据进行,服务器需要获取增量数据。
目前服务器从数据库中获取增量数据是通过触发器实现的。该过程可以为:服务器在数据库中建立增触发器、删触发器和改触发器。该增触发器用于检测该数据库中被增加的增量数据;该删触发器用于检测该数据库中被删除的增量数据;该改触发器用于检测该数据库中被修改的增量数据。当该数据库中有增量数据时,相应的触发器就会激活,服务器通过激活的触发器将增量数据保存在一个临时表中。当需要获取增量数据时,服务器直接从该临时表中获取该增量数据。
在实现本发明的过程中,发明人发现相关技术至少存在以下问题:
上述方法中需要在数据库中建立增触发器、删触发器和改触发器,然而在数据库中建立上述触发器,不仅会侵入数据库,还会影响系统的性能。
发明内容
本发明提供了一种获取增量数据的方法、装置、服务器和存储介质,可以解决相关技术的问题。技术方案如下:
一方面,本发明提供了一种获取增量数据的方法,所述方法包括:
接收数据获取指令,所述数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;
根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;
当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。
一方面,本发明提供了一种获取增量数据的装置,所述装置包括:
接收模块,用于接收数据获取指令,所述数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;
确定模块,用于根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;
输出模块,用于当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。
一方面,本发明提供了一种服务器,所述服务器包括:处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述指令、所述程序、所述代码集或所述指令集由所述处理器加载并执行以实现如上述所述的获取增量数据的方法中所执行的操作。
一方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述指令、所述程序、所述代码集或所述指令集由处理器加载并执行以实现如上述所述的获取增量数据的方法中所执行的操作。
在本发明实施例中,服务器根据可自定义的一个时间段,从目标数据表中获取在该时间段内发生变化的元组的可见的版本,将这些版本的元组作为增量数据输出,从而在不需要在数据库中建立触发器,避免了对数据库的侵入的情况下实现了增量数据的获取,提高了系统性能,且该获取可以获取到任一时间段的增量数据,大大提高了灵活性。
附图说明
图1是本发明实施例提供的一种获取增量数据的实施环境示意图;
图2是本发明实施例提供的一种获取增量数据的方法流程图;
图3-1是本发明实施例提供的一种获取增量数据的装置结构示意图;
图3-2是本发明实施例提供的另一种获取增量数据的装置结构示意图;
图3-3是本发明实施例提供的另一种获取增量数据的装置结构示意图;
图3-4是本发明实施例提供的另一种获取增量数据的装置结构示意图;
图3-5是本发明实施例提供的另一种获取增量数据的装置结构示意图;
图3-6是本发明实施例提供的另一种获取增量数据的装置结构示意图;
图4是本发明实施例提供的一种服务器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例提供了一种获取增量数据的实施环境,参见图1,该实施环境包括:第一设备101和第二设备102。第一设备101和第二设备102之间通过网络连接,第一设备101为访问设备,也即获取增量数据的设备。第二设备102为被访问设备,也即被获取增量数据的设备。当第一设备101执行指定任务时,该第一设备101可以通过网络来访问第二设备102,从第二设备102的数据库中获取目标历史时间段内的增量数据。上述指定任务可以为数据分析、ETL(Extract Transform Load,数据仓库技术)过程、数据同步、批量数据导出或者增量数据备份等。第一设备101可以为终端或者服务器,第二设备102也可以为终端或者服务器。终端可以为手机终端、PAD(Portable Android Device,可携带安卓设备)终端或者电脑终端等任一终端。
例如,该指定任务为数据分析时,第一设备101可以为终端,第二设备102可以为服务器,第一设备101从第二设备102的数据库中获取增量数据,从而结合之前获取的老数据和当前获取的增量数据进行数据分析。再如,当该指定任务为ETL过程时,第一设备101可以为服务器,第二设备102也可以为服务器。第一设备101从第二设备102的数据库中获取增量数据,从而实现ETL过程。再如,当该指定任务为数据同步时,第一设备101可以为服务器,第二设备102可以为服务器,第一设备101从第二设备102的数据库中获取增量数据,从而实现两个服务器之间的数据同步。第一设备101也可以为终端,第二设备102也可以为终端,第一设备101从第二设备102的数据库中获取增量数据,从而实现两个终端之间的数据同步。再如,当该指定任务为批量数据导出时,第一设备101可以为终端,第二设备102可以为服务器,第一设备101从第二设备102的数据库中获取增量数据,从而实现将服务器中的数据导出至终端中。再如,当该指定任务为增量数据备份时,第一设备101可以为终端,第二设备102可以为服务器,第一设备101从第二设备102的数据库中获取增量数据,从而实现将服务器中的增量数据备份至终端中。
需要说明的一点是,上述涉及的数据库中存储多个数据表,每个数据表可以用于存储元组,元组可以有一个或多个版本。其中,该数据库可以为基于MVCC(Multi-VersionConcurrency Control,多版本并发控制)的任一类型的数据库。在本发明实施例中,对该数据库的类型不作具体限定。需要说明的是,上述数据库中的数据包括三种状态:当前态、过渡态和历史态,该三种状态合称为“数据的全态”,简称全态数据,对于历史态的数据,可以通过转储的方式来存储,而不会通过清理的方式清理掉。
相较于相关技术中的在数据库中建立增触发器、删触发器和改触发器的增量数据获取方式,本发明实施例中不需要在数据库中建立增触发器、删触发器和改触发器,第二设备102直接通过事务快照来从数据库中获取该事务快照对应的目标历史时间段内的增量数据,从而避免了侵入数据库而影响第二设备102的系统性能,提高了系统性能。其中,该目标历史时间段可以是基于两个事务快照之间的快照差确定,并且,这两个事务快照可以为任意时刻的事务快照,从而可以动态地实时获取任意时刻之间的增量数据,提高了获取增量数据的灵活性和效率。当然,该目标历史时间段还可以直接基于事务标识确定,该事务标识可以采用数值形式表示,例如,事务标识可以是按照事务的创建时间按照递增的数值标识。
需要说明的另一点是,该获取增量数据的方法可以应用在数据库中,从而实现该数据库在第一设备101和第二设备102之间的一致性。其中,当该获取增量数据的方法应用在事务块内部时,该获取增量数据的方法可以作为独立的一个模块,通过该模块实现增量数据的获取。当然,该获取增量数据的方法还可以应用在数据存储模块或者用户自定义函数内部,从而在数据存储过程中或者执行用户自定义函数的过程中,即可实现对多个表的增量数据的获取,保持数据的一致性。
本发明实施例提供获取增量数据的方法,该方法应用在第一设备和第二设备之间;在本发明实施例中,以第一设备为终端,第二设备为服务器为例进行说明。参见图2,该方法包括:
步骤201:终端向服务器发送数据获取指令,该数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据。
其中,该数据获取指令可以携带目标数据表的标识、待获取的列的标识、事务快照的标识以及时间段信息,还可以包括查询条件。具体地,该数据获取指令可以采用下述SQL语句实现:
GET DATA[col_1,……]/[*]FROM table_name[SNAPSHOT snapshot_name[TOsnapshot_name2]][TIME time_value][WHERE……]。
其中,table_name为目标数据表的标识(名称)。[*]表示该目标数据表中的所有列。col_1为指定列的标识(名称)。snapshot_name为第一事务快照的标识,snapshot_name2为第二事务快照的标识。WHERE为查询条件。
TIME time_value为任一事务快照的创建时刻。如果当前数据库系统中采用单调递增的数值来对事务进行标识,也即是事务标识采用时间戳或是基于时间递增的数值形式,则该time_value也可以是事务标识,也即是,上述语句中的TIME time_value可以被替换为XID xid。
上述GET DATA语句的功能实际上还可以采用SELECT语句实现,也即是,上述语句还可以采用下述形式:
SELECT[col_1,……]/[*]FROM table_name[SNAPSHOT snapshot_name[TOsnapshot_name2]][TIME time_value][WHERE……]。
在本发明实施例中,终端不仅可以从服务器的数据库中获取增量数据,还可以从服务器的数据库中获取目标数据表中的全量数据,该全量数据是指全量的当前态数据。当终端从服务器的数据库中获取该目标数据表中的全量数据时,该GET DATA语句中可以不包括SNAPSHOT子句。
步骤202:当服务器接收到携带第一事务快照的标识和第二事务快照的标识的数据获取指令时,根据所述第一事务快照的创建时刻与所述第二事务快照的创建时刻,获取快照差,将所述快照差作为所述目标历史时间段。其中,所述快照差为由第一事务快照的创建时刻和第二事务快照的创建时刻组成的时间段。
上述步骤202中,该数据获取指令携带两个事务快照的标识,此时,说明终端想要获取的增量数据为该两个事务快照的创建时刻之间的增量数据。此时,可以根据两个事务快照的创建时刻按照时间递增的顺序分别作为目标历史时间段的起始时刻和结束时刻。
例如,第一事务快照的标识为snapshot_name,snapshot_name对应的创建时刻为pre_s;第二事务快照的标识为snapshot_name2,snapshot_name2对应的创建时刻为next_s。则第一事务快照与第二事务快照之间的快照差,也即是目标历史时间段为pre_s~next_s。
需要说明的是,除了上述步骤202中的携带两个事务快照的标识的数据获取指令以外,数据获取指令所携带的信息可以有以下任一种情况:
情况1:数据获取指令携带目标数据表的标识、待获取的列的标识、一个事务快照的标识,此时,说明终端想要获取的增量数据为该事务快照的创建时刻到当前时刻的增量数据。
例如,第一事务快照的标识为snapshot_name,snapshot_name对应的创建时刻为pre_s;当前时刻为current,则该快照差也即是目标历史时间段为pre_s~current。
基于情况1,该目标历史时间段的确定过程包括:当所述数据获取指令携带第一事务快照的标识,根据所述第一事务快照的创建时刻与当前时刻,获取快照差,将所述快照差作为所述目标历史时间段。其中,当前时刻可以是指当前时刻的事务快照的创建时刻。
该快照差可以采用时间表示或是数值型表示。例如,在采用获取时间表示的方式时,可以采用例如Now()这样的系统函数来获取当前时刻,从而基于第一事务快照的创建时刻与当前时刻(实际上可以是当前时刻的事务快照的创建时刻)来获取快照差。又例如,在采用数值型表示的方式时,可以采用current_XID这样的系统函数来获取当前的事务标识,由于该事务标识是采用真实时间标识或是逻辑时间标识或是其他方法如逻辑物理时钟等,因此,可以根据事务标识的创建时刻和上述事务快照的标识来获取快照差,本发明实施例对此不做限定。当然,需要说明的是,该用于获取快照差的方式可以有多种变化,并且可以基于数据获取指令所携带的信息而发生不同变化,其宗旨在于确定一个历史时间段,以获取该历史时间段中数据库系统所发生的变化。
情况2:数据获取指令携带目标数据表的标识、待获取的列的标识以及时间戳(事务标识),此时,说明终端想要获取的增量数据为该时间戳到当前时刻的增量数据。
例如,time_value为T1,当前时刻为current,则该目标历史时间段为T1~current。又或者,time_value为T1to T2,则该目标历史时间段为T1~T2。又或者,如果TIME采用XID形式,则,xid为xid1,当前时刻为current,则该目标历史时间段为xid1的创建时间~current。又或者,xid为xid1to xid2,则该目标历史时间段为xid1的创建时刻至xid2的创建时刻。
通过该情况2的过程来确定目标历史时间段,由于数据库中所存储的是每个元组的多个版本的数据,因此可以基于目标历史时间段的起始时刻和结束时刻,实现实时对事务的快照,以获知在该段时间内哪些元组的哪些版本的数据是可见的。
需要说明的是,在本发明实施例中所涉及的时刻是逻辑上的概念,例如创建时刻和提交时刻等,表示基于“单调递增”的排序含义,即数据事务处理中的“可串行化”语义。利用时间值区分事务只是一个实现手段,还可以有其他实现手段,可以使用采用其他递增数值可表示的事务标识来区分事务,例如事务号。例如,在PostgreSQL系统中,快照的创建时间可以是快照对应事务的事务标识。而元组的提交时间可以是事务的提交时刻,此时,当前数据库系统尚没有分配事务的标识。
由于上述时刻可以依赖于时钟或者事务标识。因此,本发明实施例提供的获取增量数据的方法不仅可以应用在依赖于真实时间(TrueTime)的系统,还可以应用在混合逻辑时钟等系统中,提高了该方法应用的广泛性。
对于任一事务快照,事务快照主要用于表明当前新事务执行时刻,当前数据库系统中哪些数据是可读的,哪些是活跃的事务,其数据不能够被事务读取。服务器可以通过对事务快照中的createTime(快照的创建时间)的读取,来实现对上述目标历史时间段的获取。
例如,该事务快照的数据结构如下所示:
如上述数据结构所示,该事务快照中会包括当前快照创建时刻,所有活跃的事务的最小事务标识、当前快照创建时刻,所有已经完成事务的最大事务标识+1以及当前快照被创建的时间。
需要说明的是,MySQL也类似的结构:如class ReadView中“trx_id_tm_up_limit_id”相当于上述的“TransactionId xmin”,class ReadView中“trx_id_t m_low_limit_id”相当于“TransactionId xmax”,在不同数据库中应用上述增量数据获取方法时,可以基于数据库来对上述数据结构进行改造,以达到相同的技术效果。
步骤203:对于所述目标数据表内的任一元组的任一版本,根据所述目标历史时间段以及所述版本的创建时刻、删除时刻以及所述版本的提交时刻,确定所述版本是否可见。
需要说明的是,服务器可以根据数据获取指令中的查询条件等,对目标数据表做全表扫描或者对该目标数据表中符合查询条件的范围内的元组进行扫描,以便读取元组,每当读取一个元组,实际上是读取到了某个元组的某一个版本。
对于一个元组来说,该元组的元组头可以如下:
Typedef struct HeapTupleFields
{
//表示一个事务的生命周期[t_xmin,t_xmax],t_xmin为创建该元组的事务的创建时刻,t_xmax为该事务的删除时刻
TransactionID t_xmin;/*inserting xact ID*///本条元组是由哪个事务创建的(创建者一定是INSERT/COPY…FROM类操作)
TransactionID t_xmax;/*deleting or locking xact ID*///本条元组是由哪个事务删除的
Uint16t_infomask;//本条元组的标志位,如是否提交
Int64commitTime;//本条元组生成时,其事务完成的时间
………….
}HeapTupleFields
服务器从目标数据表中每读取一条元组,均可以读取到该元组的生命周期信息,也即是该版本的创建时刻、删除时刻以及所述版本的提交时刻等信息,并利用上述生命周期信息来判断该版本是否可见具体的可见性判断方式可以如下述(一)至(三)所示:
(一):当所述版本为插入操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,当所述创建时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
例如,第一事务快照的标识为snapshot_name,第一事务快照的创建时刻为pre_s;第二事务快照的标识为snapshot_name2,第二事务快照的创建时刻为next_s。则该目标历史时间段为:pre_s~next_s。因此,当该元组(实际是元组的某个版本)是在pre_s前开始插入,在pre_s和next_s之间提交,或者该元组是在pre_s和next_s之间插入并提交,则服务器确定该元组是可见的,否则服务器确定该元组不可见。
在本步骤中,当该元组由插入操作生成时,服务器可以通过下述SQL语句对该元组的该版本进行可见性判断:
i.pre.sreatTime<item.commitTime<next.sreateTime,且
ii.item,t.xmax==null
当所读取的元组满足该SQL语句时,服务器确定该元组对于所述目标历史时间段可见。当该元组不满足该SQL语句时,服务器确定该元组对于所述目标历史时间段不可见。
(二):当所述版本为删除操作生成,当所述删除时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,当所述删除时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
例如,第一事务快照的标识为snapshot_name,第一事务快照的创建时刻为pre_s;第二事务快照的标识为snapshot_name2,第二事务快照的创建时刻为next_s。则目标历史时间段为pre_s~next_s。则当该元组(实际是元组的某个版本)是在pre_s前开始删除,在pre_s和next_s之间提交,或者该元组是指pre_s和next_s之间删除并提交,该元组可见。否则,元组不可见。在本步骤中,当该元组由删除操作生成时,服务器可以通过下述SQL语句对该元组进行可见性判断:
i.pre.createTime<item.commitTime<next.createTime,且
ii.item.t_xmax!=null
当该元组满足该SQL语句时,服务器确定该元组可见。当该元组不满足该SQL语句时,服务器确定该元组不可见。
(三):当该版本为更新操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,当所述创建时刻在所述目标历史时间段的起始时刻之后,所述提交时刻在所述目标历史时间段之间,确定该版本可见。
例如,第一事务快照的标识为snapshot_name,第一事务快照的创建时刻为pre_s;第二事务快照的标识为snapshot_name2,第二事务快照的创建时刻为next_s。则目标历史时间段为pre_s~next_s。因此,当该元组(实际是元组的某个版本)在pre_s前开始更新,在pre_s和next_s之间提交,或者该元组在pre_s后开始更新,在pre_s和next_s之间提交,服务器确定该元组可见,否则服务器确定该元组不可见。
在本步骤中,当该元组由更新操作生成时,服务器可以通过下述SQL语句对该元组进行可见性判断:
i.pre.createTime<old_item.commitTime<next.createTime,且
ii.old_item.t_xmax!=null,且
iii.pre.createTime<new_item.commitTime<next.createTime,且
iiii.new_item.t_xmax==null
当该元组满足该SQL语句时,服务器确定该元组可见。当该元组不满足该SQL语句时,服务器确定该元组不可见。
步骤204:当任一元组的任一版本可见时,获取该版本。
当任一元组可见时,说明该元组是在目标历史时间段的增量数据,因此,可以将该元组获取为增量数据。
当然,在得到至少一个元组的某个版本后,还可以根据数据获取指令中的其他条件,例如所需获取的列的标识以及查询条件等对元组中的数据进行进一步筛选,以得到筛选后的数据,以满足实际的获取需求。相应地,在一个可能的实现方式中,该数据获取指令还可以携带指定列的标识和/或查询条件。指定列可以为该目标数据表中的部分列或者全部列。相应的,服务器可以从至少一个元组中筛选出指定列的数据,在数据获取指令还携带查询条件时,服务器可以从至少一个元组中筛选出符合查询条件的数据。
上述步骤203至204是根据所述目标历史时间段和所述目标数据表内的每个元组的生命周期信息,从所述目标数据表的多个元组中,获取可见的元组的过程。上述生命周期信息包括了所述元组的创建时刻、删除时刻以及所述元组的提交时刻等信息,用以与目标历史时间段进行比较,从而进行元组的可见性判断,再确定输出的增量数据是哪些元组。当然,在上述步骤203中在确定是否可见的过程时,可能出现以下场景:该目标数据表内的元组均不可见,也即是在该目标历史时间段内没有任何数据发生变化,因此,如果确定目标数据表内的元组均不可见时,则可以不输出任何增量数据。进一步地,服务器可以向发送数据获取指令的终端返回获取响应信息,以告知终端当前数据库系统中的目标数据表在该目标历史时间段内没有增量数据。
步骤205:将所述至少一个元组的版本中增加一列,所述一列中存储有用于指示创建每个版本的操作类型。
在另一个可能的实现方式中,服务器可以确定创建元组的操作类型,并在输出元组的任一版本的同时,也输出创建该元组的任一版本的操作类型,以指示究竟对数据进行了怎样的增量操作。例如,可以在数据表原有列的基础上,增加一列,列名为increment_type,SMALLINT类型,用以存储有用于指示创建该版本的操作类型。
其中,该操作类型可以为插入操作、删除操作或者更新操作。服务器可以根据创建该版本的事务来确定该操作类型。
例如,用1表示插入类型;
用2表示删除类型;
用3表示更新类型。
通过增加上述列,服务器不仅可以获取到目标历史时间段内的增量数据,还可以获取到增量数据的类型,从而终端根据该操作类型,获知该增量数据是插入操作生成的增量数据,删除操作生成的增量数据还是更新操作生成的增量数据,使得信息更加直观。
步骤206:服务器向终端输出已增加列的至少一个元组的版本作为增量数据。
在一个可能的实现方式中,服务器可以直接将获取到的至少一个元组的版本作为增量数据输出。相应的,本步骤可以为:服务器构造GET DATA的结果,该GET DATA的结果中包括该已增加列的至少一个元组的版本,将该GET DATA的结果返回给终端。
在执行完该数据获取指令时,服务器可以在系统快照表中新增一条元组,所述元组用于为数据库系统留存获取增量的历史情况。上述的事务快照的标识也可以从该系统快照表中查询得到,以获知哪个表在什么时间曾经被获取过历史的增量数据。
需要说明的是,本发明实施例提供的获取增量数据的方法,能够有效地和事务概念结合,在不同隔离级别下实现各自可见的增量数据获取。这样的结合,对于随机分布的数据在增删改操作下数据散布在不同位置的情况下获取增量非常有效。
在本发明实施例中,服务器根据可自定义的一个时间段,从目标数据表中获取在该时间段内发生变化的元组的可见的版本,将这些版本作为增量数据输出,从而在不需要在数据库中建立触发器,避免了对数据库的侵入的情况下实现了增量数据的获取,提高了系统性能,且该获取可以获取到任一时间段的增量数据,大大提高了灵活性。
在本发明实施例中,服务器根据目标历史时间段对表内的元组进行可见性判断,从而将对该目标历史时间段可见的元组作为增量数据输出,从而可以在避免对数据库造成侵入的情况下,更加灵活地获取增量数据。并且,由于该目标历史时间段可以基于事务快照或是某个时间戳甚至是事务号等来确定,因此,使得服务器能够获取到任何时间段内的增量数据,进一步提高了灵活性,以及提高了获取增量数据的时效性。进一步地,还可以通过不同方式自由获取任何时段内的增量数据,从而为潜在的特殊应用提供了实现的可能。
上述方法可以应用于任一类型的应用,如执行ETL过程、数据同步、批量数据导出、增量备份任务等,则可以把增量数据应用到自己的系统中。这样的方法,相比触发器方式对宿主系统没有侵入和数据冗余,相比全量数据读取的数据量少而高效,相比分析日志的方法又简单高效。
进一步需要说明的是,本发明实施例提供的方法,很好的利用了MVCC技术中的多版本和快照技术构建了增量数据。但对快照和增量数据做了新的定义,有别于如现有系统PostgreSQL、MySQL、Oracle中对事务快照和数据项的定义,并基于事务的快照差概念和基于事务快照差提供了一种新的元组可见性判断算法。
而且,本发明实施例提供的方法,能够有效地和事务概念结合,在不同隔离级别下实现各自可见的增量数据获取。这样的结合,对于随机分布的数据在增删改操作下数据散布在不同位置的情况下获取增量非常有效。
本发明实施例提供了一种获取增量数据的装置,该装置可以应用在服务器中,用于执行上述获取增量数据的方法中服务器执行的操作。参见图3-1,该装置包括:
接收模块301,用于接收数据获取指令,该数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;
确定模块302,用于根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;
输出模块303,用于当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。
在一个可能的实现方式中,参见图3-2,该装置还包括:
第一确定模块304,用于当该数据获取指令携带第一事务快照的标识和第二事务快照的标识,根据该第一事务快照的创建时刻与该第二事务快照的创建时刻,获取快照差,将该快照差作为该目标历史时间段;
其中,该快照差为由第一事务快照的创建时刻和第二事务快照的创建时刻组成的时间段。
在一个可能的实现方式中,参见图3-3,该装置还包括:
第二确定模块305,用于当该数据获取指令携带第一事务快照的标识,根据该第一事务快照的创建时刻与当前时刻,获取快照差,将该快照差作为该目标历史时间段;
其中,该快照差为由第一事务快照的创建时刻和当前时刻组成的时间段。
在一个可能的实现方式中,该第一事务快照和该第二事务快照为系统生成的事务快照或者自定义的事务快照。
在一个可能的实现方式中,该数据获取指令携带该目标历史时间段或目标历史时刻。
在一个可能的实现方式中,参见图3-4,该确定模块302,包括:
确定单元3021,用于对于所述目标数据表内的任一元组的任一版本,根据所述目标历史时间段以及所述版本的创建时刻、删除时刻以及所述版本的提交时刻,确定所述版本是否可见。
在一个可能的实现方式中,该确定单元3021,还用于当所述版本为插入操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
该确定单元3021,还用于当所述创建时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
在一个可能的实现方式中,该确定单元3021,还用于当所述版本为删除操作生成,当所述删除时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
该确定单元3021,还用于当所述删除时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
在一个可能的实现方式中,该确定单元3021,还用于当所述版本为更新操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
该确定单元3021,还用于当所述创建时刻在所述目标历史时间段的起始时刻之后,所述提交时刻在所述目标历史时间段之间,确定所述版本可见。
在一个可能的实现方式中,参见图3-5,该装置还包括:
第一增加模块306,用于将所述至少一个元组的版本中增加一列,所述一列中存储有用于指示创建每个版本的操作类型。
在一个可能的实现方式中,参见图3-6,该装置还包括:
第二增加模块307,用于在系统快照表中新增一条元组,所述元组用于为数据库系统留存获取增量的历史情况。
在一个可能的实现方式中,所述装置应用于使用各种隔离级别的数据库系统。
需要说明的是:上述实施例提供的获取增量数据的装置在获取增量数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的获取增量数据的装置与获取增量数据的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图4是本发明实施例提供的一种服务器的结构示意图,该服务器400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processingunits,CPU)401和一个或一个以上的存储器402,其中,所述存储器402中存储有至少一条指令,所述至少一条指令由所述处理器401加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器还可以包括其他用于实现设备功能的部件,在此不做赘述。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质应用于服务器,该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该指令、该程序、该代码集或该指令集由处理器加载并执行以实现上述实施例的获取增量数据的方法中服务器所执行的操作。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种获取增量数据的方法,其特征在于,所述方法包括:
接收数据获取指令,所述数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;
根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;
当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。
2.根据权利要求1所述的方法,其特征在于,所述目标历史时间段的确定过程包括:
当所述数据获取指令携带第一事务快照的标识和第二事务快照的标识,根据所述第一事务快照的创建时刻与所述第二事务快照的创建时刻,获取快照差,将所述快照差作为所述目标历史时间段;
其中,所述快照差为由第一事务快照的创建时刻和第二事务快照的创建时刻组成的时间段。
3.根据权利要求1所述的方法,其特征在于,所述目标历史时间段的确定过程包括:
当所述数据获取指令携带第一事务快照的标识,根据所述第一事务快照的创建时刻与当前时刻,获取快照差,将所述快照差作为所述目标历史时间段;
其中,所述快照差为由第一事务快照的创建时刻和当前时刻组成的时间段。
4.根据权利要求1所述的方法,其特征在于,所述数据获取指令携带所述目标历史时间段、目标历史时刻或事务标识。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见,包括:
对于所述目标数据表内的任一元组的任一版本,根据所述目标历史时间段以及所述版本的创建时刻、删除时刻以及所述版本的提交时刻,确定所述版本是否可见。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见,包括:
当所述版本为插入操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
当所述创建时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
7.根据权利要求5所述的方法,其特征在于,所述根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见,包括:
当所述版本为删除操作生成,当所述删除时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
当所述删除时刻和所述提交时刻均在所述目标历史时间段之间,确定所述版本可见。
8.根据权利要求5所述的方法,其特征在于,所述根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见,包括:
当所述版本为更新操作生成,当所述创建时刻在所述目标历史时间段的起始时刻之前,所述提交时刻在所述目标历史时间段之间,确定所述版本可见;或者,
当所述创建时刻在所述目标历史时间段的起始时刻之后,所述提交时刻在所述目标历史时间段之间,确定所述版本可见。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述至少一个元组的版本中增加一列,所述一列中存储有用于指示创建每个版本的操作类型。
10.根据权利要求1所述的方法,其特征在于,所述将所述至少一个元组的版本作为增量数据输出之后,所述方法还包括:
在系统快照表中新增一条元组,所述元组用于为数据库系统留存获取增量的历史情况。
11.根据权利要求1所述的方法,其特征在于,所述方法应用于使用各种隔离级别的数据库系统。
12.一种获取增量数据的装置,其特征在于,所述装置包括:
接收模块,用于接收数据获取指令,所述数据获取指令用于获取目标数据表中的目标历史时间段内的增量数据;
确定模块,用于根据所述目标历史时间段和所述目标数据表内的每个元组的各个版本的生命周期信息,从所述目标数据表的多个元组的各个版本中,确定多个元组的各个版本是否可见;
输出模块,用于当确定有至少一个元组的版本可见时,将所述至少一个元组的版本作为增量数据输出。
13.根据权利要求12所述的装置,其特征在于,该装置还包括:
第一确定模块,用于当所述数据获取指令携带第一事务快照的标识和第二事务快照的标识,根据所述第一事务快照的创建时刻与所述第二事务快照的创建时刻,获取快照差,将所述快照差作为所述目标历史时间段;
其中,所述快照差为由第一事务快照的创建时刻和第二事务快照的创建时刻组成的时间段。
14.一种服务器,其特征在于,所述服务器包括:处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述指令、所述程序、所述代码集或所述指令集由所述处理器加载并执行以实现如权利要求1至11任一权利要求所述的获取增量数据的方法中所执行的操作。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述指令、所述程序、所述代码集或所述指令集由处理器加载并执行以实现如权利要求1至11任一权利要求所述的获取增量数据的方法中所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810265132.5A CN110309122B (zh) | 2018-03-28 | 2018-03-28 | 获取增量数据的方法、装置、服务器和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810265132.5A CN110309122B (zh) | 2018-03-28 | 2018-03-28 | 获取增量数据的方法、装置、服务器和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110309122A true CN110309122A (zh) | 2019-10-08 |
CN110309122B CN110309122B (zh) | 2022-12-30 |
Family
ID=68073769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810265132.5A Active CN110309122B (zh) | 2018-03-28 | 2018-03-28 | 获取增量数据的方法、装置、服务器和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110309122B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111309733A (zh) * | 2020-02-20 | 2020-06-19 | 深圳震有科技股份有限公司 | 增量数据抽取处理方法及装置、计算机设备、介质 |
CN112052249A (zh) * | 2020-08-27 | 2020-12-08 | 青岛聚好联科技有限公司 | 一种基于层级时间栅栏的增量数据管理的方法及装置 |
CN112307145A (zh) * | 2020-10-20 | 2021-02-02 | 北京完美知识科技有限公司 | 一种历史地图数据的批量更新方法及装置、介质、设备 |
CN112685360A (zh) * | 2020-12-29 | 2021-04-20 | 平安普惠企业管理有限公司 | 内存数据的持久化方法及装置、存储介质、计算机设备 |
US11531594B2 (en) | 2018-11-30 | 2022-12-20 | Tencent Technology (Shenzhen) Company Limited | Data recovery method and apparatus, server, and computer-readable storage medium |
US12001297B2 (en) | 2018-11-30 | 2024-06-04 | Tencent Technology (Shenzhen) Company Limited | Data backup method and apparatus, server, and computer-readable storage medium |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103440265A (zh) * | 2013-08-01 | 2013-12-11 | 暨南大学 | 基于MapReduce的MYSQL数据库的变化数据捕获方法 |
CN104216955A (zh) * | 2014-08-20 | 2014-12-17 | 百度在线网络技术(北京)有限公司 | 一种操作数据及管理事务的方法、装置及分布式系统 |
CN104346340A (zh) * | 2013-07-24 | 2015-02-11 | 日电(中国)有限公司 | 一种存储资源描述框架数据的方法和装置 |
CN106648840A (zh) * | 2016-08-30 | 2017-05-10 | 周烜 | 事务之间的时序确定方法和装置 |
CN106777230A (zh) * | 2016-12-26 | 2017-05-31 | 东软集团股份有限公司 | 一种分区系统、分区方法及装置 |
CN106991113A (zh) * | 2015-12-18 | 2017-07-28 | Sap欧洲公司 | 数据库环境中的表格复制 |
-
2018
- 2018-03-28 CN CN201810265132.5A patent/CN110309122B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104346340A (zh) * | 2013-07-24 | 2015-02-11 | 日电(中国)有限公司 | 一种存储资源描述框架数据的方法和装置 |
CN103440265A (zh) * | 2013-08-01 | 2013-12-11 | 暨南大学 | 基于MapReduce的MYSQL数据库的变化数据捕获方法 |
CN104216955A (zh) * | 2014-08-20 | 2014-12-17 | 百度在线网络技术(北京)有限公司 | 一种操作数据及管理事务的方法、装置及分布式系统 |
CN106991113A (zh) * | 2015-12-18 | 2017-07-28 | Sap欧洲公司 | 数据库环境中的表格复制 |
CN106648840A (zh) * | 2016-08-30 | 2017-05-10 | 周烜 | 事务之间的时序确定方法和装置 |
CN106777230A (zh) * | 2016-12-26 | 2017-05-31 | 东软集团股份有限公司 | 一种分区系统、分区方法及装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11531594B2 (en) | 2018-11-30 | 2022-12-20 | Tencent Technology (Shenzhen) Company Limited | Data recovery method and apparatus, server, and computer-readable storage medium |
US12001297B2 (en) | 2018-11-30 | 2024-06-04 | Tencent Technology (Shenzhen) Company Limited | Data backup method and apparatus, server, and computer-readable storage medium |
CN111309733A (zh) * | 2020-02-20 | 2020-06-19 | 深圳震有科技股份有限公司 | 增量数据抽取处理方法及装置、计算机设备、介质 |
CN112052249A (zh) * | 2020-08-27 | 2020-12-08 | 青岛聚好联科技有限公司 | 一种基于层级时间栅栏的增量数据管理的方法及装置 |
CN112307145A (zh) * | 2020-10-20 | 2021-02-02 | 北京完美知识科技有限公司 | 一种历史地图数据的批量更新方法及装置、介质、设备 |
CN112685360A (zh) * | 2020-12-29 | 2021-04-20 | 平安普惠企业管理有限公司 | 内存数据的持久化方法及装置、存储介质、计算机设备 |
CN112685360B (zh) * | 2020-12-29 | 2023-09-22 | 湖北华中电力科技开发有限责任公司 | 内存数据的持久化方法及装置、存储介质、计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110309122B (zh) | 2022-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110309122A (zh) | 获取增量数据的方法、装置、服务器和存储介质 | |
Bailis et al. | Scalable atomic visibility with RAMP transactions | |
Tseng et al. | Efficient algorithms for mining top-k high utility itemsets | |
EP3234780B1 (en) | Detecting lost writes | |
CN105608086B (zh) | 分布式数据库系统的事务处理方法及装置 | |
Baker et al. | Megastore: Providing scalable, highly available storage for interactive services. | |
JP4340226B2 (ja) | データ項目の使用可能バージョンの提供 | |
Bassil | A comparative study on the performance of the Top DBMS systems | |
EP2797013B1 (en) | Database update execution according to power management schemes | |
JP2023546249A (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
CN111736964B (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
CN110019469B (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
US7698312B2 (en) | Performing recursive database operations | |
US20100153346A1 (en) | Data integrity in a database environment through background synchronization | |
Delaney et al. | Microsoft SQL Server 2012 Internals | |
US11645281B1 (en) | Caching query plans in database systems | |
Mühlbauer et al. | ScyPer: a hybrid OLTP&OLAP distributed main memory database system for scalable real-time analytics | |
Tang et al. | Achieving convergent causal consistency and high availability for cloud storage | |
CN110928900B (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN115145943A (zh) | 多数据源元数据快速比对方法、系统、设备和存储介质 | |
Schreiner et al. | NewSQL through the looking glass | |
US11755568B1 (en) | Execution and consistency model for materialized tables | |
CN114385657A (zh) | 数据存储方法、装置及存储介质 | |
US20160321232A1 (en) | Computer Implemented Systems and Methods for Data Usage Monitoring |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230920 Address after: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |