具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一信息也可以被称为第二信息,不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
请参阅图1,图1为本发明实施例提供的一种数据合并方法的流程图,所述方法包括:
步骤101:接收第一数据;
该实施例中,系统接收到的第一数据可以是单独的一条数据,也可以是一个数据包,该数据包中可以包括一条数据,也可以包括多条数据,当然,第一数据也可以是数据流。如果接收到的是多条数据或者是数据流,需要将多条数据或数据流拆分成每条数据,然后,确定每条数据对应的键值,根据每条数据对应的键值将该条数据存储到数据库中;然后,根据每条数据按照对应的预设合并条件构建查询与每条数据对应数据(即相关数据)的键值;然后,根据每条数据对应数据的键值,判断是否能从所述数据库中查询到对应的该键值的数据,如果能查询到,则合并每条数据及其对应的数据(即相关的数据)。如果查询不到,结束本次操作,或结束流程。
比如,一条数据,可以是用户登录网站的交易数据,也可以是用户的支付数据等。
需要说明的是,本发明实施例中,将连续进入系统的多条数据可以称为流式数据,流式数据中的每条数据流可以由多条数据组成。通常情况下,数据流中的每条数据的数据结构都是一样的,但是每条数据对应的键值不同。
步骤102:确定所述第一数据对应的第一键值;
该步骤中,第一数据可以包括一条数据,也可以包括多条数据,每条数据都对应一个键值,键值可以根据该数据的一个属性或多个属性值来构造,其具体的构造方式,对于本领域技术人员来说,已是熟知技术,在此不再赘述。
比如,当数据流A的一条数据进入系统时,系统根据接收到的当前数据的属性值得到键值(Key)A0(也可以称为是数据流A的键值)。其中,键值是windows中注册表中的概念,位于注册表结构链末端,和文件系统的文件类似,包含当前计算机及应用程序执行时使用的实际配置信息和数据。其中,注册表里面的所有信息是以各种形式的键值项数据保存下来。在注册表编辑器的右窗口中,保存的都是各种键值项数据。键值项由键值名、数据类型和键值三部分组成,其格式为:“键值名:数据类型:键值”。通常情况下,键值与数据类型或格式有关,键值可以包括几种数据类型,以适应不同环境的使用需求。
其中,键值又可以称为存储键值,其作用是用来存储数据的,每条数据都对应一个键值。确定当前数据对应的键值有多种方式,并且,确定当前数据键值的过程与该数据的格式有关,比如,如果数据是java对象,可以从配置信息中的属性名通过反射来从java对象中获取对应属性的键值内容;如果数据是字符串,可以根据不同的分隔符对字符串进行分割来获取对应位置的键值内容;如果是其他特定的数据格式,需要根据相应的数据格式来获取键值内容。本实施例不再一一赘述。
步骤103:根据所述第一键值将所述第一数据存储到数据库中;
该步骤中,也就是说,以第一键值为索引,将第一数据存储到数据库中,以便于后续根据该第一键值可以查询到该第一数据。当然,还可以根据该第一键值构造能与该第一数据关联的第二数据的第二键值。如下所述。
步骤104:根据所述第一数据按照第一预设合并条件构建查询第二数据的第二键值;其中,所述第一数据和所述第二数据相关;
该步骤中,根据第一数据按照第一预设合并条件计算出查询能合并的第二数据的第二键值。第一预设合并条件是两条数据(即第一数据和第二数据,下同)的属性值相同,根据该属性值来构造该数据对应的键值,即A.B0’=B.B0,其中,A是第一数据,B是第二数据,B0’是根据第一数据构建出查询第二数据B的键值,B0是第二数据B的键值,B0’和B0的值相同,只是二者是根据不同的数据的属性值构造的。
其中,本实施例中,预设合并条件是用户根据实际需要预先设置的,其目的是合并(即关联)数据库相关的数据,当然,预设合并条件还可以包括其他参数,本实施例不作限制。
需要说明的是,本实施例中,对于任意的数据流A,假设该数据流A中的一条数据需要与数据流B中的数据进行合并,对于数据流A中的任一条数据,根据该条数据可以得到查询数据流B中的一个Key B0,并且对于数据流B中的任意一条数据,也可以得到数据流A中的一个Key A0。
步骤105:如果根据所述第二键值从所述数据库中查询到对应的所述第二数据,则合并所述第一数据和所述第二数据。
该步骤中,系统在构建查询第二数据的第二键值后,查询数据库中是否存储有与所述第二键值对应的第二数据,如果有,则合并第一数据和第二数据;如果没有,即结束该流程。需要说明的是,本实施例中,对内存中的数据合并,也可以理解为,在数据库中将第一数据和第二数据进行关联。
本发明实施例中,对接收到的第一数据采用键值存储,并根据该第一数据构造查询第二数据(即将与第一数据相关的数据称为第二数据)的键值,然后,根据第二数据的键值查询数据库是否存储有对应的第二数据,如果有,则合并(即关联)第一数据和第二数据,简化了数据合并时的关联查询,提高了多条数据的实时合并效率。
还请参阅图2,图2为本发明实施例提供的一种数据合并方法的另一流程图,所述方法包括:
步骤201至步骤204,详见步骤101至步骤104,在此不再赘述:
步骤205:如果根据所述第二键值从所述数据库中查询到对应的所述第二数据,则根据所述第二数据逐步构建查询第N数据的第N键值;其中,所述N为大于等于3的自然数;
需要说明的是,本实施例中的第N数据,可以是一条数据,也可以多条数据,本实施例统称为第N数据。
其中,根据所述第二数据逐步构建查询第N数据的第N键值,可以是根据所述第二数据按照第二预设合并条件逐步构建查询第N数据的第N键值。
其中,第二预设合并条件为N条数据合并。N为大于等于3的自然数,也就是,第二预设合并条件为3条数据(即第一数据、第二数据至第N数据,下同)的属性值相同,当然,还可以是更多条的数据的属性值相同。
步骤206:如果根据所述第N键值从所述数据库中逐步查询到对应的所述第N数据,则合并所述第一数据、所述第二数据至所述第N数据。
其中,该步骤中,在查询到第二数据时,按照第二预设合并条件,根据所述第二数据构建查询第三数据的第三键值,如果根据第三键值从数据库中能查询到第三数据,然后,再根据第三数据构建查询第四数据的第四键值,然后,根据第四键值从数据库中查询到第四数据,依次类推,直至查询到第N数据,然后合并第一数据、第二数据、第三条数据……直到第N数据。
当然,在该实施例中,第N数据也可以是一条数据,比如,N为第三条数据,或者第四条数据等等。
该步骤中,在查询到第N数据时,直接合并查询到的第一数据到第N数据。
需要说明的是,在该实施例中,如果预设合并条件是两条数据合并(即两条数据的键值相同),则在数据库中查询到对应的第一条数据和第二条数据时,就合并该第一条数据和第二条数据,即在数据库中关联第一条数据和第二条数据;如果预设合并条件是N条(其中N可是第三条或第四条以上)数据合并(即N数据的键值相同),则在数据库中查询到对应的所有N条数据时,才能合并该N条数据。
本发明实施例中,对接收到的第一数据采用键值存储,并根据该第一数据构造查询第二数据的键值,然后,如果根据第二数据的键值查询到数据库中存储有对应的第二数据,则根据第二数据构造查询第三数据的键值,如果根据第三键值查询数库得到对应的第三数据,依次类推,直到查找到第N数据,然后合并N数据。简化了流式数据中的多条数据合并时的关联查询,提高了多条数据的实时合并效率。
为了便于理解,下面依据的应用实例来说明。
请参阅图3,图3为本发明实施例提供的一种数据合并方法的第一应用示例图,该实施例中,预设合并条件以两条数据合并为例,具体包括:
步骤301:系统接收到数据A;
其中,数据A可以是流式数据中的其中一条数据。
步骤302:系统构建所述数据A的键值A0;其中,键值A0也可以称为存储键值。
假设数据A为用户登录网上的交易数据,则构建所述数据A的键值A0,为,其构建键值的方式可以根据数据中的用户ID来构建键值,当然,并不限于此。
步骤303:系统根据键值A0将所述数据A存储到数据库中;
其中,本实施例中的数据库,可以是内存,存储器,KV存储器等,当然,所述数据库可以是所有能存储数据的设备。本实施例以KV存储器为例。
步骤304:根据所述数据A构建查询条数据B的键值B0;
结合上述例子,假设数据B为交易数据,由于数据A和数据B均为同一用户(即同一ID)发送的交易数据和支付数据等,根据该数据A和数据B的属性分别构造的键值也相同(即是同一ID),所以,数据A和数据B就是相关联的数据,需要在数据库中将二者关联起来。
步骤305:系统根据所述键值B0从所述数据库中查询所述数据B;
步骤306:系统判断是否查询到所述数据B,如果查询到,则执行步骤307;否则,执行步骤308;
步骤307:合并所述数据A和所述数据B;
步骤308:结束本次流程。
该实施例中,当数据流的一条数据A进入系统时,系统根据当前数据A得到键值(Key)A0,并根据该Key A0将当前数据A存储到数据库中,形如A0->A,即通过键值A0可以查询到数据A。
然后,根据数据A计算出需要查询数据B的Key B0,并根据B0到数据库中进行查询,如果查询到该B0对应的数据B,则合并数据A和数据B,得到合并结果A和B。
如果未查询到数据B,则结束时本次流程。以便于系统后续在接收到数据B进入系统时,按照上述过程进行构造和查询,然后,再触发合并数据A和数据B的操作。
请参阅图4,图4为本发明实施例提供的一种数据合并方法的第二应用示例图,该实施例中,假设需要合并的数据(或数据流)为A,B和C,其中,预设合并条件为A.B0’=B.B0并且B.C0’=C.C0,其中,B0’是根据数据A构建的键值,B0是数据B的键值,C0’是根据数据B构建的键值,C0是数据C的键值。本实施例,以三条数据合并为例,在实际应用中,并不限于此三条,可以是N条,其N条数据合并过程,与三条数据合并过程类似,具体详见下述,在此不再赘述,所述方法包括:
步骤401:系统接收到数据A;
其中,数据A可以是流式数据中的其中一条数据。
步骤402:系统构建所述数据A的键值A0;其中,键值A0也可以称为存储键值。
假设数据A为用户登录网上交易数据,则构建所述数据A的键值A0,为,可以根据数据中的用户ID来构建键值,当然,并不限于此。
步骤403:系统根据键值A0将所述数据A存储到数据库中;
其中,本实施例中的数据库,可以是内存,存储器,KV存储器等,也就是说,所述数据库可以是所有能存储数据的设备。
步骤404:根据所述数据A按照预设合并条件构建查询条数据B的键值B0’;其中,所述数据A和所述数据B相关;
比如,数据A和数据B均为同一用户(即同一ID)发送的交易数据和支付数据等。
步骤405:系统根据所述键值B0’从所述数据库中查询所述数据B;
步骤406:系统判断是否查询到数据B,如果查询到,则执行步骤407;否则,执行步骤411;
步骤407:系统根据所述数据B按照预设合并条件构建查询数据C的键值C0’;
步骤408:系统根据所述键值C0’从所述数据库中查询所述数据C;
步骤409:系统判断是否查询到所述数据C,如果查询到,则执行步骤410;否则,执行步骤411;
步骤410:系统合并所述数据A、数据B和数据C,得到合并结果数据A、B和C;
步骤411:结束本次流程。
也就是说,该实施例中,以需要合并的是三个数据A、B和C为例,预设合并条件为A.B0’=B.B0并且B.C0’=C.C0。
当任意一条数据进入系统时,例如数据A,根据事先定义好的预设合并条件,将数据A保存到数据库中;然后,从数据A中构建出查询数据B的Key B0’,并且根据Key B0’去数据库中查询数据B,如果没有查询到,则合并结束。
如果查询到数据B,在根据事先定义好的预设合并条件,从数据B中构建出查询数据C的键值Key C0’,然后,根据键值Key C0’去数据库中查询数据C,如果没有查询到,则合并结束;
如果查询到数据C,则即符合预设合并条件的数据A,B,C都已存在,合并数据A,B,C,并合并成功后,将该合并后的数据A,B,C交由其他设备进行数据处理。
本发明实施例中,对接收到的数据采用键值存储,并根据该数据构造查询能合并的数据的键值,然后,根据查询到的键值查询数据库是否存储有对应的数据,如果查询到对应的数据,则合并该数据。本实施例简化了多条数据合并时的关联查询,提高了多条数据合并时的实时效率。
基于上述方法的实现过程,本实施例还提供一种数据合并装置,其结构示意图如图5所示,所述装置包括:接收单元51,确定单元52,发送单元53,第一构建单元54,第一查询单元55和第一合并单元56,其中,
所述接收单元51,用于接收第一数据;其中,第一数据的描述详见上述,在此不再赘述;
所述确定单元52,用于确定所述第一数据对应的第一键值;
所述发送单元53,用于根据所述第一键值将所述第一数据发送到数据库进行存储;
所述第一构建单元54,用于在所述发送单元53发送所述第一数据后,根据所述第一数据按照第一预设合并条件构建查询第二数据的第二键值;
其中,所述第一构建单元54构建所述第一键值的第一预设合并条件为两条数据的属性值相同。
所述第一查询单元55,用于根据所述第二键值查询所述数据库中是否存储有对应的所述第二数据;
所述第一合并单元56,用于在所述第一查询单元55查询到所述第二数据时,合并所述第一数据和所述第二数据。
可选的,所述装置还可以包括:第二构建单元61,第二查询单元62和第二合并单元64,其结构示意图如图6所示,其中,
所述第二构建单元61,用于在所述查询单元查询到对应的所述第二数据时,根据所述第二数据逐步构建查询第N数据的第N键值;其中,所述N≥3,所述第N数据与所述第二数据相关和/或第一数据的属性值相同;
其中,所述第二构建单元61,具体用于根据所述第二数据按照第二预设合并条件逐步构建查询第N数据的第N键值。所述第二预设合并条件为三条以上数据的属性值相同。
所述第二查询单元62,用于根据所述第N键值逐步查询所述数据库中是否存储有对应的所述第N数据;
所述第二合并单元63,用于在所述第二查询单元62查询到所述第N数据时,合并所述第一数据、所述第二数据至所述第N数据。
所述装置中各个单元的功能和作用的实现过程,详见上述方法中对应步骤的实现过程,在此不再赘述。
参见图7,为本发明实施例电子设备结构图,该电子设备700包括:处理器710、存储器720、收发器730和总线740;
处理器710、存储器720、收发器730通过总线740相互连接;总线740可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器720,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器720可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。具体用于存储预设合并条件。
收发器730用于连接其他设备,并与其他设备进行通信。具体的所述收发器730可以用于:接收第一数据;其中,所述第一数据可以是一条数据,也可以是一个数据包,该数据包中包括一条或多条,当然,第一数据也可以是数据流。需要说明的是,当第一数据是多条数据或数据流时,需要将该多条数据或数据流拆分成每条数据。
所述处理器710执行存储器720中存储的所述程序代码,用于确定所述第一数据的第一键值;当然,如果第一数据是多条数据时或数据流时,确定每条数据对应的键值;
所述收发器730,还用于根据所述第一键值将所述第一数据存储到数据库中;
如果第一数据包括多条数据流时,收发器730,还用于需要按照每条数据对应的键值将对应的数据存储到数据库中。
所述处理器710,还用于根据所述第一数据按照第一预设合并条件构建查询第二数据的第二键值;以及在根据所述第二键值从所述数据库中查询到对应的所述第二数据时,合并所述第一数据和所述第二数据。
可选地,其中,第一预设合并条件为两条数据的属性的属性值相同。
如果第一数据包括多条数据流时,处理器710,还用于根据每条数据按照其对应的预设合并条件分别构建查询与每条数据关联的数据的键值;以及在根据所述键值从所述数据库中查询到对应的每条数据时,合并所述这两条关联的数据。
可选地,所述处理器710,还用于在查询到对应的所述第二数据时,根据所述第二数据逐步构建查询第N数据的第N键值;其中,所述N为大于等于3的自然数,所述第N数据与所述第二数据和/或所述第一数据相关;以及在根据所述第N键值从所述数据库中逐步查询到对应的所述第N数据时,合并所述第一数据、所述第二数据至所述第N数据。
可选地,所述处理器710根据所述第二数据逐步构建查询第N数据的第N键值包括:根据所述第二数据按照第二预设合并条件逐步构建查询第N数据的第N键值:其中,第二预设合并条件为三条以上数据的属性值相同。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。