具体实施方式
在本说明书中,以数据库为例,数据库一般分为关系型数据库和非关系型数据库,例如分别对应数据库A和数据库B,初始阶段数据写入数据库A源数据表中即可满足当前要求,但是随着互联网的不断发展,传统的数据库A在应付超大规模、高并发的数据时就显得力不从心,而这个时候,需要将写入数据库A源数据表中的数据迁移至数据库B目标数据表中进行存储,并由数据库A源数据表切换至数据库B目标数据表,后续实时数据写入数据库B目标数据表中,并不是写入数据库A源数据表中。诸如类似数据迁移设计数据表切换的场景还有很多,本说明书实施例在此不再一一赘述,对于此类场景,由于数据迁移需要消耗一定时间,并且在这期间源数据表不断有新的实时数据写入,因此如何协调源数据表与目标数据表的切换时机,保证数据时序性是当前急需解决的问题。
针对上述技术问题,本说明书实施例提供一种技术方案,参见图1所示,其中数据队列为数据源,当然可以是其它形式的数据源,当接收到用户发起的数据表重建请求时,构建与源数据表A对应的目标数据表B,对于源数据表A中的历史数据,迁移至目标数据表B,在处理完历史数据之后,从数据队列中确定增量数据,增量数据写入目标数据表B,另外一条数据写入线路:实时数据从数据队列先写入代理服务,由代理服务写入源数据表A,在增量数据写入目标数据表B的期间,根据预设的判断周期,判断写入目标数据表B的增量数据以及写入源数据表A的实时数据是否满足预设的要求,若是,则由实时数据写入源数据表切换为实时数据写入目标数据表。如此一来,在增量数据写入目标数据表的期间,写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,即可以由实时数据写入源数据表切换为实时数据写入目标数据表,保证了数据时序性。
具体的,本说明书实施例提供的技术方案如下:
接收用户发起的数据表重建请求,确定与所述数据表重建请求对应的源数据表;根据所述数据表重建请求中携带的构建信息,构建与所述源数据表对应的目标数据表,其中所述构建信息包括多个不同的预设字段,且与源数据表中包括的多个字段一一对应;确定数据表重建请求接收时刻之前写入源数据表的数据为历史数据,将所述历史数据迁移至所述目标数据表;确定数据表重建请求接收时刻以及数据表重建请求接收时刻之后待写入源数据表的实时数据为增量数据,在将所述历史数据迁移至所述目标数据表之后,将所述增量数据写入所述目标数据表;在增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求;若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
参见图2所示,为本说明书实施例提供的数据表切换方法的实施流程图,该方法具体可以包括以下步骤:
S201,接收用户发起的数据表重建请求,确定与所述数据表重建请求对应的源数据表;
在本说明书中,用户可发起数据表重建请求,意味着需要重新建立一个与源数据表对应的目标数据表,其中针对用户发起的数据表重建请求,需要确定该数据表重建请求是针对哪个源数据表发起的,即需要确定与该数据表重建请求对应的源数据表。
作为一种实现方式,在该数据表重建请求中预先添加源数据表标识,以表示该数据表重建请求是针对哪个源数据表发起的,解析所述数据表重建请求中携带的源数据表标识,查询源数据表标识与源数据表的对应关系项,确定与该数据表重建请求对应的源数据表。例如解析所述数据表重建请求中携带的源数据表标识A,查询源数据表标识与源数据表的对应关系项,可以确定与该数据表重建请求对应的源数据表A,其中该源数据表标识可以是源数据表的ID、名称、生成时间等,本说明书对源数据表标识的具体表现形式不作限定。
另外,也需要记录数据表重建请求的接收时刻,例如数据表重建请求的接收时刻是10:00。
S202,根据所述数据表重建请求中携带的构建信息,构建与所述源数据表对应的目标数据表,其中所述构建信息包括多个不同的预设字段,且与源数据表中包括的多个字段一一对应;
当接收到数据表重建请求时,根据该数据表重建请求中携带的构建信息,构建与源数据表对应的目标数据表,例如构建与源数据表A对应的目标数据表B。
其中该构建信息中包括多个不同的预设字段,这些不同的预设字段的属性不同,且与源数据表中包括的多个字段一一对应,利用这些预设字段以及与源数据表中字段的对应关系,构建与源数据表对应的目标数据表。例如一条构建信息为:目标数据表中字段1对应于源数据表中字段1、目标数据表中字段6对应于源数据表中字段2、目标数据表中字段3对应于源数据表中字段3……。
例如,构建的目标数据表中首行(当然也可以是其他行)每个位置上的字段与源数据表中首行(当然也可以是其他行)每个位置上的字段一一对应,源数据表中包括的字段与目标数据表在包括的字段数目相同,不同的是字段可能不同,如下源数据表A与目标数据表B:
字段1 |
字段2 |
字段3 |
字段4 |
字段5 |
NULL |
NULL |
NULL |
NULL |
NULL |
源数据表A
目标数据表B
由上述可知,源数据表A首行各位置上的字段与目标数据表B首行各位置上的字段一一对应,不同的是源数据表A中字段2对应目标数据表B中字段6,这是由于实际需要,需要构建出一个与源数据表A不一样的目标数据表B。
S203,确定数据表重建请求接收时刻之前写入源数据表的数据为历史数据,将所述历史数据迁移至所述目标数据表;
针对S202中所构建的目标数据表,将历史数据移至该目标数据表,其中该历史数据为数据表重建请求接收时刻之前写入源数据表的数据。另外该历史数据的来源可以是源数据表,也可以是其它来源,例如备份数据表,本说明书实施例对此不作限定。
在记录了数据表重建请求的接收时刻,在该时刻之前写入源数据表的数据都可以视为历史数据,例如数据表重建请求的接收时刻是10:00,在10:00之前写入源数据表的数据为历史数据,将该历史数据从源数据表中迁移至目标数据表,其中可以分批次迁移,在历史数据迁移的过程中,根据源数据表中字段与目标数据表中字段的对应关系,源数据表对应字段下的数据迁移至目标数据表对应字段下,例如源数据表A字段1下的数据迁移至目标数据表B字段1下,源数据表A字段2下的数据迁移至目标数据表B字段6下,为了保证数据时序性,确保历史数据在源数据表中的排序顺序与在目标数据表中的排序顺序一致。
S204,确定数据表重建请求接收时刻以及数据表重建请求接收时刻之后待写入源数据表的实时数据为增量数据,在将所述历史数据迁移至所述目标数据表之后,将所述增量数据写入所述目标数据表;
对于数据表重建请求接收时刻,作为一个分水岭,在该接收时刻之前可以确定写入源数据表的数据为历史数据,在该接收时刻以及该接收时刻之后可以确定待写入源数据表的实时数据为增量数据,该增量数据位于如图1所示的数据队列中,在将历史数据迁移至目标数据表之后,将该增量数据写入该目标数据表中,其中待写入源数据表的实时数据也会按照正常写入顺序实时写入源数据表,如图1所示的另一条数据写入线路。
例如,数据表重建请求的接收时刻是10:00,10:00作为一个分水岭,在10:00之前写入源数据表的数据为历史数据,在10:00以及10:00之后待写入源数据表的实时数据为增量数据,在将历史数据迁移至目标数据表之后,将该增量数据写入该目标数据表中。意味着在数据表重建请求接收时刻以及数据表重建请求接收时刻之后待写入源数据表的实时数据都为增量数据,待写入源数据表的实时数据为如图1所示中数据队列中的数据以及后续实时产生的新数据。
S205,在增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求;
在增量数据写入目标数据表的期间,按照预设的判断周期(每分钟),判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,例如增量数据写入目标数据表的起始时刻是11:00,在11:00之后,增量数据陆续写入目标数据表,在这个期间,每间隔一分钟,就判断一次,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,如在11:01这一时刻,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,在11:02这一时刻,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,以此类推。
作为一种实现方式,在增量数据写入目标数据表的期间,按照预设的判断周期,确定写入目标数据表的增量数据的产生时刻,确定写入源数据表的实时数据的产生时刻,将增量数据的产生时刻与实时数据的产生时刻作差得到第一时间差,判断第一时间差是否小于预设的第二时间差,即判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求。
例如增量数据写入目标数据表的起始时刻是11:00,在11:00之后,增量数据陆续写入目标数据表,在这个期间,每间隔一分钟,确定写入目标数据表的增量数据的产生时刻,确定写入源数据表的实时数据的产生时刻,将增量数据的产生时刻与实时数据的产生时刻作差得到第一时间差,判断第一时间差是否小于预设的第二时间差,如在11:01这一时刻,确定写入目标数据表的增量数据的产生时刻,确定写入源数据表的实时数据的产生时刻,将增量数据的产生时刻与实时数据的产生时刻作差得到T1,判断该T1是否小于预设的T,在11:02这一时刻确定写入目标数据表的增量数据的产生时刻,确定写入源数据表的实时数据的产生时刻,将增量数据的产生时刻与实时数据的产生时刻作差得到T2,判断该T2是否小于预设的T,以此类推。
其中对于写入目标数据表的增量数据的产生时刻以及写入源数据表的实时数据的产生时刻,可以在如图1所示的数据队列中进行记录,也可以是数据本身就携带着其产生时刻(一般地,每条数据自身携带着产生时刻),解析写入目标数据表的增量数据自身携带的产生时刻,以确定写入目标数据表的增量数据的产生时刻,解析写入源数据表的实时数据自身携带的产生时刻,以确定写入源数据表的实时数据的产生时刻,本说明书对如何确定写入目标数据表的增量数据的产生时刻以及如何确定写入源数据表的实时数据的产生时刻的具体实现方式不作限定。
S206,若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。
若在某个判断周期中,写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表,作为一种实现方式:若在某个判断周期中,第一时间差小于预设的第二时间差,则由实时数据写入源数据表切换为实时数据写入目标数据表。
在由实时数据写入源数据表切换为实时数据写入目标数据表之后,停止增量数据写入目标数据表,自此后续实时数据写入目标数据表,源数据表被弃用,启用目标数据表,如图3所示。
通过上述对本说明书实施例提供的技术方案的描述,接收用户发起的数据表重建请求,确定源数据表,构建与源数据表对应的目标数据表,确定历史数据,将历史数据迁移至目标数据表,确定增量数据,将增量数据写入目标数据表,在将增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。如此一来,在增量数据写入目标数据表的期间,写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,即可以由实时数据写入源数据表切换为实时数据写入目标数据表,保证了数据时序性。
相对于上述方法实施例,本说明书实施例还提供一种数据表切换装置,参见图4所示,该装置可以包括:请求接收模块410、源数据表确定模块420、目标数据表构建模块430、历史数据迁移模块440、增量数据写入模块450、判断模块460、数据表切换模块470。
请求接收模块410,用于接收用户发起的数据表重建请求;
源数据表确定模块420,用于确定与所述数据表重建请求对应的源数据表;
目标数据表构建模块430,用于根据所述数据表重建请求中携带的构建信息,构建与所述源数据表对应的目标数据表,其中所述构建信息包括多个不同的预设字段,且与源数据表中包括的多个字段一一对应;
历史数据迁移模块440,用于确定数据表重建请求接收时刻之前写入源数据表的数据为历史数据,将所述历史数据迁移至所述目标数据表;
增量数据写入模块450,用于确定数据表重建请求接收时刻以及数据表重建请求接收时刻之后待写入源数据表的实时数据为增量数据,在将所述历史数据迁移至所述目标数据表之后,将所述增量数据写入所述目标数据表;
判断模块460,用于在增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求;
数据表切换模块470,用于若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。
在本说明书的一种具体实施方式中,所述源数据表确定模块420具体用于:
解析所述数据表重建请求中携带的源数据表标识;
查询源数据表标识与源数据表的对应关系项,确定与所述数据表重建请求对应的源数据表。
在本说明书的一种具体实施方式中,所述判断模块460具体包括:
数据产生时刻确定子模块461,用于在增量数据写入目标数据表的期间,按照预设的判断周期,确定写入目标数据表的增量数据的产生时刻,确定写入源数据表的实时数据的产生时刻;
时间差计算子模块462,用于将增量数据的产生时刻与实时数据的产生时刻作差得到第一时间差;
判断子模块463,用于判断第一时间差是否小于预设的第二时间差;
所述数据表切换模块470具体用于:
若第一时间差小于预设的第二时间差,则由实时数据写入源数据表切换为实时数据写入目标数据表。
在本说明书的一种具体实施方式中,所述数据产生时刻确定子模块461具体用于:
在增量数据写入目标数据表的期间,按照预设的判断周期,解析写入目标数据表的增量数据自身携带的产生时刻,以确定写入目标数据表的增量数据的产生时刻,解析写入源数据表的实时数据自身携带的产生时刻,以确定写入源数据表的实时数据的产生时刻。
在本说明书的一种具体实施方式中,所述装置还包括:
数据停止写入模块480,用于在由实时数据写入源数据表切换为实时数据写入目标数据表之后,停止增量数据写入目标数据表。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
通过上述对本说明书实施例提供的技术方案的描述,接收用户发起的数据表重建请求,确定源数据表,构建与源数据表对应的目标数据表,确定历史数据,将历史数据迁移至目标数据表,确定增量数据,将增量数据写入目标数据表,在将增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求,若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。如此一来,在增量数据写入目标数据表的期间,写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,即可以由实时数据写入源数据表切换为实时数据写入目标数据表,保证了数据时序性。
本说明书实施例还提供一种计算机设备,如图5所示,该设备可以包括:处理器510、存储器520、输入/输出接口530、通信接口540和总线550。其中处理器510、存储器520、输入/输出接口530和通信接口540通过总线550实现彼此之间在设备内部的通信连接。
处理器510可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器520可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器520可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器520中,并由处理器510来调用执行。
输入/输出接口530用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口540用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线550包括一通路,在设备的各个组件(例如处理器510、存储器520、输入/输出接口530和通信接口540)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器510、存储器520、输入/输出接口530、通信接口540以及总线550,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的数据表切换方法。该方法至少包括:
一种数据表切换方法,该方法包括:
接收用户发起的数据表重建请求,确定与所述数据表重建请求对应的源数据表;
根据所述数据表重建请求中携带的构建信息,构建与所述源数据表对应的目标数据表,其中所述构建信息包括多个不同的预设字段,且与源数据表中包括的多个字段一一对应;
确定数据表重建请求接收时刻之前写入源数据表的数据为历史数据,将所述历史数据迁移至所述目标数据表;
确定数据表重建请求接收时刻以及数据表重建请求接收时刻之后待写入源数据表的实时数据为增量数据,在将所述历史数据迁移至所述目标数据表之后,将所述增量数据写入所述目标数据表;
在增量数据写入目标数据表的期间,按照预设的判断周期,判断写入目标数据表的增量数据以及写入源数据表的实时数据是否满足预设的要求;
若写入目标数据表的增量数据以及写入源数据表的实时数据满足预设的要求,则由实时数据写入源数据表切换为实时数据写入目标数据表。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。