一种查询方法、文件合并方法与相关装置与流程

文档序号:11829873阅读:129来源:国知局
一种查询方法、文件合并方法与相关装置与流程

本发明涉及数据库领域,尤其涉及一种查询方法、文件合并方法与相关装置。



背景技术:

随着互联网数据的日益增长,管理分布式数据的需求也日益增加,因此提供一种高效、快速、性能优异的分布式数据库,具有重要的实际意义。

日志结构的合并树(Log-Structured Merge-Tree,LSM-Tree)提供了一种数据存储的思想:将对数据记录的更新保存在内存中,待内存中的更新数据记录达到一定大小后再合并为文件写入磁盘。在从LSM-Tree数据库查询数据时,需要读取磁盘中的历史数据记录和内存中的更新数据记录,并将读取结果合并后作为查询结果。

但是实际应用中,若对某条数据记录进行了多次更新,则磁盘中就会保存有多个记录了该条数据记录的更新信息的文件。这样在查询数据时,就需要从磁盘中访问较多的文件,查询时间较长,查询效率较低。



技术实现要素:

本发明实施例提供了一种数据查询方法,用于提升数据库的查询效率。

本发明实施例第一方面提供了一种查询方法,适用于日志结构的合并树LSM-Tree数据库,包括:

接收查询指令,所述查询指令中包括待查找的目标RowKey;

确定所述目标RowKey对应的N条目标记录,其中,所述N条目标记录包括所述目标RowKey对应的初始目标记录,和/或用于更新所述初始目标记录的更新目标记录,和/或所述目标RowKey对应的查询结果记录,每条所述目标记录包括标志位,其中,初始目标记录和查询结果记录的标识位为1,更新目标记录的标志位为0;

按照由新到旧的顺序,依次读取确定的目标记录;

若读取的第M条目标记录的标志位为1,则终止所述依次读取确定的目标记录的操作,其中1≤M≤N;

将读取到的M条目标记录合并为一条查询结果记录,并将所述查询结果记录作为查询结果。

将所述查询结果记录写入所述数据库。

结合本发明实施例的第一方面,本发明实施例的第一方面的第一种实现方式中,所述将读取到的M条目标记录合并为一条查询结果记录包括:

根据读取到的M条目标记录,生成查询结果记录,其中所述查询结果记录的RowKey为所述目标RowKey,所述查询结果记录的标志位为1。

结合本发明实施例的第一方面或第一方面的第一种实现方式,本发明实施例的第一方面的第二种实现方式中,所述目标记录还包括时间戳和/或版本号,所述时间戳用于表示所述目标记录的生成时间,所述版本号用于表示所述目标记录的新旧;

所述按照由新到旧的顺序,依次读取确定的目标记录包括:根据所述N条目标记录的时间戳和/或版本号,按照由新到旧的顺序,依次读取确定的目标记录。

本发明实施例的第二方面提供了一种文件合并方法,适用于日志结构的合并树LSM-Tree数据库,包括:

确定待合并的P个旧文件,其中,每个所述旧文件包括一条或多条旧记录,每条旧记录包括标志位和用于标识所述旧记录的RowKey,其中,所述标志位的取值包括0或1,其中,P为不小于2的整数;

将所述P个旧文件合并为一个新文件,其中,所述新文件包括Q条新记录,每条新记录包括标志位和用于标识所述新记录的RowKey,所述Q条新记录的Q个RowKey为所述P个旧文件的RowKey的并集;其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则所述第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则所述第R条新记录的标志位为0,其中,Q≥1,1≤R≤Q。

结合本发明实施例的第二方面,本发明实施例的第二方面的第一种实现方式中,所述将所述P个旧文件合并为一个新文件包括:

确定所述新文件中待确定的第R条新记录的RowKey,其中,1≤R≤Q;

按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位;

若读取的第S个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位为1,则确定所述新文件中第R条新记录的标志位为1,并终止所述按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位的步骤,其中,1≤S≤P;

若读取的所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位均为0,则确定所述新文件中第R条新记录的标志位为0。

结合本发明实施例的第二方面或第二方面的第一种实现方式,本发明实施例的第二方面的第二种实现方式中,所述方法还包括:

在将P个旧文件合并为一个新文件后,删除所述P个旧文件。

本发明实施例的第三方面提供了一种查询装置,适用于日志结构的合并树LSM-Tree数据库,包括:

指令接收模块,用于接收查询指令,所述查询指令中包括待查找的目标RowKey;

记录确定模块,用于确定所述目标RowKey对应的N条目标记录,其中,所述N条目标记录包括所述目标RowKey对应的初始目标记录,和/或用于更新所述初始目标记录的更新目标记录,和/或所述目标RowKey对应的查询结果记录,每条所述目标记录包括标志位,其中,初始目标记录和查询结果记录的标识位为1,更新目标记录的标志位为0;

记录读取模块,用于按照由新到旧的顺序,依次读取确定的目标记录;

若读取的第M条目标记录的标志位为1,则所述记录读取模块终止所述依次读取确定的目标记录的操作,其中1≤M≤N;

记录合并模块,用于将读取到的M条目标记录合并为一条查询结果记录,并将所述查询结果记录作为查询结果。

结果写入模块,用于将所述查询结果记录写入所述数据库。

结合本发明实施例的第三方面,本发明实施例的第三方面的第一种实现方式中,所述记录合并模块具体用于:

根据读取到的M条目标记录,生成查询结果记录,并将所述查询结果记录作为查询结果,其中所述查询结果记录的RowKey为所述目标RowKey,所述查询结果记录的标志位为1。

结合本发明实施例的第三方面或第三方面的第一种实现方式,本发明实施例的第三方面的第二种实现方式中,所述目标记录还包括时间戳和/或版本号,所述时间戳用于表示所述目标记录的生成时间,所述版本号用于表示所述目标记录的新旧;

所述记录读取模块具体用于:根据所述N条目标记录的时间戳和/或版本号,按照由新到旧的顺序,依次读取确定的目标记录。

本发明实施例的第四方面提供了一种文件合并装置,适用于日志结构的合并树LSM-Tree数据库,包括:

文件确定模块,用于确定待合并的P个旧文件,其中,每个所述旧文件包括一条或多条旧记录,每条旧记录包括标志位和用于标识所述旧记录的RowKey,其中,所述标志位的取值包括0或1,其中,P为不小于2的整数;

文件合并模块,用于将所述P个旧文件合并为一个新文件,其中,所述新文件包括Q条新记录,每条新记录包括标志位和用于标识所述新记录的RowKey,所述Q条新记录的Q个RowKey为所述P个旧文件的RowKey的并集;其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则所述第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则所述第R条新记录的标志位为0,其中,Q≥1,1≤R≤Q。

结合本发明实施例的第四方面,本发明实施例的第四方面的第一种实现方式中,所述文件合并模块具体用于:

确定所述新文件中待确定的第R条新记录的RowKey,其中,1≤R≤Q;

按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位;

若读取的第S个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位为1,则确定所述新文件中第R条新记录的标志位为1,并终止所述按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的 RowKey所对应的旧记录的标志位的步骤,其中,1≤S≤P;

若读取的所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位均为0,则确定所述新文件中第R条新记录的标志位为0。

结合本发明实施例的第四方面或第四方面的第一种实现方式,本发明实施例的第四方面的第二种实现方式中,所述装置还包括:

文件删除模块,用于在将P个旧文件合并为一个新文件后,删除所述P个旧文件。

本发明实施例中,查询装置接收查询指令;确定目标RowKey对应的N条目标记录;按照由新到旧的顺序,依次读取确定的目标记录;若查询装置读取到第M条目标记录时,该条目标记录的标志位为1,则终止依次读取确定的目标记录的操作。将读取到的M条目标记录合并为一条查询结果记录,并将查询结果记录作为查询结果;将查询结果记录写入数据库。由于查询结果记录的标志位为1,这样当查询装置再次查找目标RowKey时,只需要按照数据库中的目标RowKey对应的目标记录的生产时间顺序,依次读取到最新生成的查询结果记录即可,生成该查询结果记录的N条目标记录无需被读取。与现有技术中,查询装置需要读取目标RowKey对应的所有的目标记录相比,本实施例提供的查询方法可以减少读取的文件的数量,节约了查询时间和数据库的资源,提高了查询效率。

附图说明

图1为本发明实施例中查询方法一个实施例流程图;

图2为本发明实施例中文件合并方法一个实施例流程图;

图3为本发明实施例中查询装置一个实施例结构图;

图4为本发明实施例中文件合并装置一个实施例结构图;

图5为本发明实施例中查询装置或文件合并装置一个实施例结构图。

具体实施方式

本发明实施例提供了一种查询方法,用于提升LSM-Tree数据库的性能。本发明实施例还提供了相关的文件合并方法以及相关装置,以下将分别进行 描述。

现阶段的技术中,基于LSM-Tree结构的数据库(以下简称LSM-Tree数据库)中的文件结构请参阅表1(a)。其中,表1(a)仅为LSM-Tree数据库中文件的逻辑结构,其底层文件可以为其它形式,此处不做限定。

表1(a)

表1(a)中每行对应文件File A中的一条记录,如表1(a)所示,每条记录包括主键(RowKey)与键值(Value)。RowKey用于在File A中唯一标识该条记录,Value用于记录具体的数值。每条记录还可以包括其他内容,如时间戳、版本号、数据类型等,此处不做限定。

本发明实施例对LSM-Tree数据库中的文件结构做了细微的修改,具体的,为每条数据添加了一个标志位(Flag),标志位的取值可以为0或1。本发明实施例中LSM-Tree数据库中的文件结构请参阅表1(b)。其中,表1(b)仅为本发明实施例中LSM-Tree数据库中文件的逻辑结构,其底层文件可以为其它形式,此处不做限定。

表1(b)

表1(b)中每行对应文件File A中的一条记录,如表1(b)所示,每条记录包括RowKey、标志位与Value。RowKey用于在File A中唯一标识该条 记录,标志位具有0、1两种取值,Value用于记录具体的数值。每条记录还可以包括其他内容,如时间戳、版本号、或数据类型等,此处不做限定。

其中,标志位的赋值可以遵循如下规律:以RowKey 1为例,当数据库初始生成RowKey值为RowKey 1的初始记录时,该条初始记录的标志位取值为1;此后若生成RowKey 1的更新记录来对该条初始记录做更新,则RowKey 1的更新记录的标志位为0;当从数据库中查询RowKey 1对应的记录时,数据库会若将RowKey 1对应的多条记录进行合并,得到查询结果记录,其中查询结果记录的标志位为1。

本发明实施例基于表1(b)所示的文件结构,以及上述标志位的赋值规律,提出了一种查询方法,用于查询目标RowKey。其基本流程请参阅图1,包括:

101、接收查询指令;

LSM-Tree数据库包括查询装置,用于查询数据。本实施例中,查询装置接收查询指令。其中,查询指令中包括待查找的目标RowKey;

102、确定目标RowKey对应的N条目标记录。

查询装置确定目标RowKey对应的N条目标记录,并将该N条目标记录按照由新到旧的顺序进行排序。其中,该N条目标记录包括目标RowKey对应的初始目标记录、和/或用于更新该初始目标记录的更新目标记录,和/或该目标RowKey对应的查询结果记录。其中,该N条目标记录可以为内存中的目标记录,也可以为磁盘文件中的目标记录,本实施例中不做限定。

103、按照由新到旧的顺序,依次读取确定的目标记录;

查询装置将该N条目标记录按照由新到旧的顺序,依次读取确定的目标记录。

特别的,本步骤并不要求查询装置读取全部的N条目标记录。若查询装置读取到第M条目标记录时,该条目标记录的标志位为1,则终止依次读取确定的目标记录的操作。可以理解的,1≤M≤N。从理论上来看,第M条目标记录可以为任意一条标志位为1的目标记录,但为了节约数据库的读资源,简化查询装置的操作,优选的,第M条目标记录可以为查询装置读取到的第1条标志位为1的目标记录。

104、将读取到的M条目标记录合并为一条查询结果记录,并将查询结果记录作为查询结果。

查询装置将读取到的M条目标记录合并为一条目标RowKey对应的查询结果记录,并将该查询结果记录作为查询指令对应的查询结果。

可以理解的,查询结果记录的RowKey应为目标RowKey,查询结果记录的标志位的取值为1。

105、将查询结果记录写入数据库。

查询装置将得到的目标RowKey的查询结果记录写入数据库。其中,查询装置既可以将查询结果记录写入数据库的内存,也可以将查询结果记录写入数据库的磁盘,本实施例中不做限定。

值得指出的是,由于步骤105中最新生成的查询结果记录的标志位为1,这样当查询装置再次执行步骤101至105查找目标RowKey时,只需要按照数据库中的RowKey对应的目标记录的生产时间顺序,依次读取到该条最新生成的查询结果记录即可,生成该查询结果记录的N条目标记录无需被读取。

本实施例中,查询装置接收查询指令;确定目标RowKey对应的N条目标记录;按照由新到旧的顺序,依次读取确定的目标记录;若查询装置读取到第M条目标记录时,该条目标记录的标志位为1,则终止依次读取确定的目标记录的操作;将读取到的M条目标记录合并为一条查询结果记录,并将查询结果记录作为查询结果;将查询结果记录写入数据库。由于查询结果记录的标志位为1,这样当查询装置再次查找目标RowKey时,只需要按照数据库中的目标RowKey对应的目标记录的生产时间顺序,依次读取到最新生成的查询结果记录即可,生成该查询结果记录的N条目标记录无需被读取。与现有技术中,查询装置需要读取目标RowKey对应的所有的目标记录相比,本实施例提供的查询方法可以减少读取的文件的数量,节约了查询时间和数据库的资源,提高了查询效率。

其中,LSM-Tree数据库中的每条记录可以包括时间戳,时间戳用于表示该条记录的生成时间。步骤103中,查询装置可以根据该N条目标记录的时间戳,来将N条目标记录按照由新到旧的顺序依次读取确定的目标记录。步骤104中,查询结果记录也可以包括时间戳,该时间戳用于表示该查询结果 记录的生成时间。可以理解的,该查询结果记录的时间戳的时间应晚于N条目标记录的时间戳的时间。

其中,LSM-Tree数据库中的每条记录可以包括版本号,版本号用于表示该条记录的版本的新旧。步骤103中,查询装置可以根据该N条目标记录的版本号,来按照由新到旧的顺序依次读取确定的目标记录。步骤104中,查询结果记录也可以包括版本号,该版本号用于表示该查询结果记录的新旧。可以理解的,该查询结果记录的版本号应新于该N条目标记录的版本号。

具有相同RowKey对应的记录可能存在于多个不同的文件中。随着文件的不断增多,每次查询RowKey时都需要从多个文件中读取记录进行合并。数据库运行的时间越久,数据库中的文件就越多,导致查询的效率就越低。现阶段的技术中常常将多个旧文件合并为一个新文件,然后删除该多个旧文件,已达到减少文件个数,提高查询效率的目的。由于本申请中的文件结构在现有技术的基础上增加了一个标志位,因此在文件合并时,需要确定合并后的文件中,每条记录的标志位。

因此,本发明实施例还提供了一种文件合并方法,用于详细解释基于表1(b)所示的文件结构的文件在合并时如何确定标志位。其基本流程请参阅图2,包括:

201、确定待合并的P个旧文件,其中,每个旧文件包括一条或多条旧记录,每条旧记录包括标志位和用于标识该条旧记录的RowKey,其中,标志位的取值包括0或1,其中,P为不小于2的整数。其中,该P个旧文件可以位于数据库的磁盘中。

202、将该P个旧文件合并为一个新文件。其中,该新文件包括Q条新记录,每条新记录包括标志位和用于标识该条新记录的RowKey,Q条新记录的Q个RowKey为该P个旧文件的RowKey的并集;其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则第R条新记录的标志位为0。其中,Q≥1,1≤R≤Q。其中,该新文件可以位于数据库的磁盘中。

本实施例基于表1(b)所示的文件结构提供了一种文件合并方法,能够 在文件合并时,确定合并后的新文件中每条新记录的标志位。其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则第R条新记录的标志位为0。这样就确定了新文件中每条新记录的标志位,使得新文件的结构也满足表1(b)所示的文件结构,保证了数据库的文件结构的统一性。

优选的,步骤202中,文件合并装置具体可以通过如下方式将该P个旧文件合并为一个新文件:首先确定新文件中待确定的第R条新记录的RowKey,其中,1≤R≤Q;然后按照文件由新到旧的顺序,依次确定在该P个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位;若读取的第S个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位为1,则确定新文件中第R条新记录的标志位为1,并终止按照文件由新到旧的顺序依次确定在P个旧文件中第R条新记录的RowKey所对应的旧记录的标志位的步骤,其中,1≤S≤P;若读取的P个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位全部为0,则确定新文件中第R条新记录的标志位为0。当R依次取遍1至Q中的所有整数后,就可以确定新文件中每条新记录的标志位。通过这样的方法,使得文件合并装置在确定第R条新记录的标志位时,只需要读取到第R条新记录的RowKey所对应的旧记录中,第1条标志位为1的旧记录即可,无需读取全部P个文件,减少了读取的文件个数,缩短了文件合并时间。

优选的,本实施例中在在将P个旧文件合并为一个新文件后,还可以删除该P个旧文件,以减少数据库的文件个数。

为了便于理解上述实施例,下面将以一个具体的应用场景为例进行描述。

LSM-Tree数据库的查询装置接收查询指令,该查询指令中包括待查找的目标RowKey为RowKey 20。

查询装置确定LSM-Tree数据库中,RowKey 20对应的所有目标记录。其中,查询装置在文件File 1中得到了RowKey 20的初始记录,在文件File 2、File 3、File 4中得到了RowKey 20的3条更新记录。查询装置将该4条记录按照生成时间进行排序,File 4的更新记录的初始时间最晚,File 2、File 3次 之,File 1的初始记录的生成时间最早。其中,File 1中RowKey 20对应的的标志位为1,File 2、File 3、File 4中RowKey 20对应的的标志位为0。

查询装置依次读取RowKey 20对应的目标记录,直到读取到的目标记录的标志位为1为止。由于File 2、File 3、File 4中RowKey 20对应的目标记录的标志位为0,因此查询装置依次读取File 4、File 3、File 2、File 1中RowKey 20对应的目标记录。

查询装置将File 4、File 3、File 2、File 1中RowKey 20对应的目标记录合并为一条查询结果记录,并将该条查询结果记录作为查询结果。其中,该条查询结果记录的RowKey为RowKey 20,标志位为1。

查询装置将该条查询结果记录写入数据库的文件File 5中。

此后,数据库又生成了两条用于更新RowKey 20对应的记录的更新记录,分别保存在文件File 6、File 7中。其中,这两条更新记录的标志位为0。

当查询装置再次接收到查询指令查找RowKey 20时,查询装置确定RowKey 20对应的所有目标记录。具体的,在文件File 1中得到了RowKey 20的初始记录,在文件File 2、File 3、File 4、File 6、File 7中得到了RowKey 20的5条更新记录,在文件File 5中得到了RowKey 20的查询结果记录。查询装置将该7条记录按照生成时间进行排序,排序次序为File 7、File 6、File 5、File 4、File 3、File 2、File 1。

查询装置依次读取RowKey 20对应的目标记录,直到读取到的目标记录的标志位为1为止。由于File 7、File 6中RowKey 20对应的目标记录的标志位为0,File 5中RowKey 20对应的目标记录的标志位为1,因此查询装置依次读取File 7、File 6、File 5中RowKey 20对应的目标记录。

查询装置将File 7、File 6、File 5中RowKey 20对应的目标记录合并为一条新的查询结果记录,其中,该条新的查询结果记录的RowKey为RowKey 20,标志位为1。

查询装置将该条新的查询结果记录写入数据库的文件File 8中。

LSM-Tree数据库的文件合并装置确定待合并的三个文件File 9、File 10和File 11,请参阅表2(a)、表2(b)与表2(c)。其中,File 9中包括3条记录,其RowKey分别为RowKey 1、RowKey 2和RowKey 3;File 10中包括 3条记录,其RowKey分别为RowKey 2、RowKey 3和RowKey 4;File 11中包括3条记录,其RowKey分别为RowKey 3、RowKey 4和RowKey 5。其中文件File11最新,File 9最旧。

文件合并装置将File 9、File 10和File 11合并为File 12。其中,File 12的RowKey为File 9、File 10和File 11的RowKey的并集:RowKey 1、RowKey 2、RowKey 3、RowKey 4和RowKey5。其中,由于RowKey 1在File 11和File 10中不存在,在File 9中的标志位为0,,因此在File 12中标志位为0;RowKey 2在File 11中不存在,在File 10中的标志位为0,在File 9中标志位为1,因此在File 12中标志位为1;RowKey 3在File 11、File 10、File 9中的标志位全部为0,因此在File 12中标志位为0;RowKey 4在File 11中的标志位为1,因此文件合并装置不再读取File 10与File 9中RowKey 4对应的记录,直接确定RowKey 4在File 12中标志位为1;RowKey 5在File 11中的标志位为1,因此文件合并装置不再读取File 10与File 9中RowKey 5对应的记录,直接确定RowKey 5在File 12中标志位为1。合并后得到的文件File 12请参阅表2(d)。其中,File 12中的各条记录的Value为合并后的Value值。

表2(a)

表2(b)

表2(c)

表2(d)

本发明实施例还提供了相关的查询装置,用于实现图1所示的查询方法。其基本结构请参阅图3,包括:

指令接收模块301,用于接收查询指令,查询指令中包括待查找的目标RowKey;

记录确定模块302,用于确定目标RowKey对应的N条目标记录,其中,该N条目标记录包括目标RowKey对应的初始目标记录,和/或用于更新初始目标记录的更新目标记录,和/或目标RowKey对应的查询结果记录,每条目标记录包括标志位,其中,初始目标记录和查询结果记录的标识位为1,更新目标记录的标志位为0;

记录读取模块303,用于按照由新到旧的顺序,依次读取确定的目标记录;

若读取的第M条目标记录的标志位为1,则记录读取模块303终止依次读取确定的目标记录的操作,其中1≤M≤N;

记录合并模块304,用于将读取到的M条目标记录合并为一条查询结果记录,并将该查询结果记录作为查询结果。

结果写入模块305,用于将查询结果记录写入所述数据库。

本实施例中,指令接收模块301接收查询指令;记录确定模块302确定目标RowKey对应的N条目标记录;记录读取模块303按照由新到旧的顺序,依次读取确定的目标记录;若查询装置读取到第M条目标记录时,该条目标记录的标志位为1,则终止依次读取确定的目标记录的操作。记录合并模块304将读取到的M条目标记录合并为一条查询结果记录,并将查询结果记录作为查询结果;结果写入模块305将查询结果记录写入数据库。由于查询结果记录的标志位为1,这样当查询装置再次查找目标RowKey时,只需要按照数据库中的目标RowKey对应的目标记录的生产时间顺序,依次读取到最新生成的查询结果记录即可,生成该查询结果记录的N条目标记录无需被读取。与现有技术中,查询装置需要读取目标RowKey对应的所有的目标记录相比,本实施例提供的查询方法可以减少读取的文件的数量,节约了查询时间和数据库的资源,提高了查询效率。

优选的,作为本发明的又一个实施例,记录合并模块304具体用于:

根据读取到的M条目标记录,生成查询结果记录,并将查询结果记录作为查询结果,其中查询结果记录的RowKey为目标RowKey,查询结果记录的标志位为1。

优选的,作为本发明的又一个实施例,每条目标记录还包括时间戳,该时间戳用于表示所述目标记录的生成时间。记录读取模块303具体用于:根据所述N条目标记录的时间戳,按照由新到旧的顺序,依次读取确定的目标记录。

优选的,作为本发明的又一个实施例,每条记录可以包括版本号,版本号用于表示该条记录的版本的新旧。记录读取模块303可以根据该N条目标记录的版本号,来按照由新到旧的顺序依次读取确定的目标记录。查询结果记录也可以包括版本号,该版本号用于表示该查询结果记录的新旧。可以理解的,该查询结果记录的版本号应新于该N条目标记录的版本号。

本发明实施例还提供了相关的文件合并装置,用于实现图2所示的文件 合并方法。其基本结构请参阅图4,包括:

文件确定模块401,用于确定待合并的P个旧文件,其中,每个所述旧文件包括一条或多条旧记录,每条旧记录包括标志位和用于标识所述旧记录的RowKey,其中,所述标志位的取值包括0或1,其中,P为不小于2的整数;

文件合并模块402,用于将所述P个旧文件合并为一个新文件,其中,所述新文件包括Q条新记录,每条新记录包括标志位和用于标识所述新记录的RowKey,所述Q条新记录的Q个RowKey为所述P个旧文件的RowKey的并集;其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则所述第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则所述第R条新记录的标志位为0,其中,Q≥1,1≤R≤Q。

本实施例基于表1(b)所示的文件结构提供了一种文件合并装置,能够在文件合并时,确定合并后的新文件中每条新记录的标志位。其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则第R条新记录的标志位为0。这样就确定了新文件中每条新记录的标志位,使得新文件的结构也满足表1(b)所示的文件结构,保证了数据库的文件结构的统一性。

优选的,作为本发明的又一个实施例,文件合并模块402具体可以通过如下方式将该P个旧文件合并为一个新文件:首先确定新文件中待确定的第R条新记录的RowKey,其中,1≤R≤Q;然后按照文件由新到旧的顺序,依次确定在该P个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位;若读取的第S个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位为1,则确定新文件中第R条新记录的标志位为1,并终止按照文件由新到旧的顺序依次确定在P个旧文件中第R条新记录的RowKey所对应的旧记录的标志位的步骤,其中,1≤S≤P;若读取的P个旧文件中,第R条新记录的RowKey所对应的旧记录的标志位全部为0,则确定新文件中第R条新记录的标志位为0。当R依次取遍1至Q中的所有整数后,就可以确定新文件中每条新记录的标志位。通过这样的方法,使得文件合并模块402在确定第R 条新记录的标志位时,只需要读取到第R条新记录的RowKey所对应的旧记录中,第1条标志位为1的旧记录即可,无需读取全部P个文件,减少了读取的文件个数,缩短了文件合并时间。

优选的,作为本发明的又一个实施例,文件合并装置还可以包括文件删除模块403,用于在将P个旧文件合并为一个新文件后,删除该P个旧文件。可以理解的,文件删除模块403为可选模块。

为了便于理解上述实施例,下面将以一个具体的应用场景为例进行描述。

LSM-Tree数据库的查询装置的指令接收模块301接收查询指令,该查询指令中包括待查找的目标RowKey为RowKey 20。

记录确定模块302确定LSM-Tree数据库中,RowKey 20对应的所有目标记录。其中,记录确定模块302在文件File 1中得到了RowKey 20的初始记录,在文件File 2、File 3、File 4中得到了RowKey 20的3条更新记录。记录确定模块302将该4条记录按照生成时间进行排序,File 4的更新记录的初始时间最晚,File 2、File 3次之,File 1的初始记录的生成时间最早。其中,File 1中RowKey 20对应的的标志位为1,File 2、File 3、File 4中RowKey 20对应的的标志位为0。

记录读取模块303依次读取RowKey 20对应的目标记录,直到读取到的目标记录的标志位为1为止。由于File 2、File 3、File 4中RowKey 20对应的目标记录的标志位为0,因此记录读取模块303依次读取File 4、File 3、File 2、File 1中RowKey 20对应的目标记录。

记录合并模块304将File 4、File 3、File 2、File 1中RowKey 20对应的目标记录合并为一条查询结果记录,并将该条查询结果记录作为查询结果。其中,该条查询结果记录的RowKey为RowKey 20,标志位为1。

结果写入模块305将该条查询结果记录写入数据库的文件File 5中。

此后,数据库又生成了两条用于更新RowKey 20对应的记录的更新记录,分别保存在文件File 6、File 7中。其中,这两条更新记录的标志位为0。

当指令接收模块301再次接收到查询指令查找RowKey 20时,记录确定模块302确定RowKey 20对应的所有目标记录。具体的,在文件File 1中得到了RowKey 20的初始记录,在文件File 2、File 3、File 4、File 6、File 7中 得到了RowKey 20的5条更新记录,在文件File 5中得到了RowKey 20的查询结果记录。记录确定模块302将该7条记录按照生成时间进行排序,排序次序为File 7、File 6、File 5、File 4、File 3、File 2、File 1。

记录读取模块303依次读取RowKey 20对应的目标记录,直到读取到的目标记录的标志位为1为止。由于File 7、File 6中RowKey 20对应的目标记录的标志位为0,File 5中RowKey 20对应的目标记录的标志位为1,因此记录读取模块303依次读取File 7、File 6、File 5中RowKey 20对应的目标记录。

记录合并模块304将File 7、File 6、File 5中RowKey 20对应的目标记录合并为一条新的查询结果记录,其中,该条新的查询结果记录的RowKey为RowKey 20,标志位为1。

结果写入模块305将该条新的查询结果记录写入数据库的文件File 8中。

LSM-Tree数据库的文件合并装置的文件确定模块401确定待合并的三个文件File 9、File 10和File 11,请参阅表2(a)、表2(b)与表2(c)。其中,File 9中包括3条记录,其RowKey分别为RowKey 1、RowKey 2和RowKey 3;File 10中包括3条记录,其RowKey分别为RowKey 2、RowKey 3和RowKey 4;File 11中包括3条记录,其RowKey分别为RowKey 3、RowKey 4和RowKey 5。其中文件File11最新,File 9最旧。

文件合并模块402将File 9、File 10和File 11合并为File 12。其中,File 12的RowKey为File 9、File 10和File 11的RowKey的并集:RowKey 1、RowKey 2、RowKey 3、RowKey 4和RowKey5。其中,由于RowKey 1在File 11和File 10中不存在,在File 9中的标志位为0,,因此在File 12中标志位为0;RowKey 2在File 11中不存在,在File 10中的标志位为0,在File 9中标志位为1,因此在File 12中标志位为1;RowKey 3在File 11、File 10、File 9中的标志位全部为0,因此在File 12中标志位为0;RowKey 4在File 11中的标志位为1,因此文件合并模块402不再读取File 10与File 9中RowKey 4对应的记录,直接确定RowKey 4在File 12中标志位为1;RowKey 5在File 11中的标志位为1,因此文件合并模块402不再读取File 10与File 9中RowKey 5对应的记录,直接确定RowKey 5在File 12中标志位为1。合并后得到的文件File 12请参阅表2(d)。其中,File 12中的各条记录的Value为合并后的 Value值。

上面从单元化功能实体的角度对本发明实施例中的查询装置进行了描述,下面从硬件处理的角度对本发明实施例中的查询装置进行描述,请参阅图5,本发明实施例中的查询装置500另一实施例包括:

输入装置501、输出装置502、处理器503和存储器504(其中查询装置500中的处理器503的数量可以一个或多个,图5中以一个处理器503为例)。在本发明的一些实施例中,输入装置501、输出装置502、处理器503和存储器504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。

其中,通过调用存储器504存储的操作指令,处理器503用于执行如下步骤:

接收查询指令,所述查询指令中包括待查找的目标RowKey;

确定所述目标RowKey对应的N条目标记录,其中,所述N条目标记录包括所述目标RowKey对应的初始目标记录,和/或用于更新所述初始目标记录的更新目标记录,和/或所述目标RowKey对应的查询结果记录,每条所述目标记录包括标志位,其中,初始目标记录和查询结果记录的标识位为1,更新目标记录的标志位为0;

按照由新到旧的顺序,依次读取确定的目标记录;

若读取的第M条目标记录的标志位为1,则终止所述依次读取确定的目标记录的操作,其中1≤M≤N;

将读取到的M条目标记录合并为一条查询结果记录,并将所述查询结果记录作为查询结果。

将所述查询结果记录写入所述数据库。

本发明的一些实施例中,处理器503还执行如下步骤:

根据读取到的M条目标记录,生成查询结果记录,其中所述查询结果记录的RowKey为所述目标RowKey,所述查询结果记录的标志位为1。

本发明的一些实施例中所述目标记录还包括时间戳和/或版本号,所述时间戳用于表示所述目标记录的生成时间,所述版本号用于表示所述目标记录的新旧,处理器503还执行如下步骤:

根据所述N条目标记录的时间戳和/或版本号,将所述N条目标记录按照 生成时间由新到旧的顺序进行排序。

上面从单元化功能实体的角度对本发明实施例中的文件合并装置进行了描述,下面从硬件处理的角度对本发明实施例中的文件合并装置进行描述,请仍参阅图5,本发明实施例中的文件合并装置500另一实施例包括:

输入装置501、输出装置502、处理器503和存储器504(其中文件合并装置500中的处理器503的数量可以一个或多个,图5中以一个处理器503为例)。在本发明的一些实施例中,输入装置501、输出装置502、处理器503和存储器504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。

其中,通过调用存储器504存储的操作指令,处理器503用于执行如下步骤:

确定待合并的P个旧文件,其中,每个所述旧文件包括一条或多条旧记录,每条旧记录包括标志位和用于标识所述旧记录的RowKey,其中,所述标志位的取值包括0或1,其中,P为不小于2的整数;

将所述P个旧文件合并为一个新文件,其中,所述新文件包括Q条新记录,每条新记录包括标志位和用于标识所述新记录的RowKey,所述Q条新记录的Q个RowKey为所述P个旧文件的RowKey的并集;其中,若第R条新记录的RowKey对应的旧记录中,存在标志位为1的旧记录,则所述第R条新记录的标志位为1,若第R条新记录的RowKey对应的旧记录的标志位全部为0,则所述第R条新记录的标志位为0,其中,Q≥1,1≤R≤Q。

本发明的一些实施例中,处理器503还执行如下步骤:

确定所述新文件中待确定的第R条新记录的RowKey,其中,1≤R≤Q;

按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位;

若读取的第S个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位为1,则确定所述新文件中第R条新记录的标志位为1,并终止所述按照由新到旧的顺序依次确定在所述P个旧文件中,所述第R条新记录的RowKey所对应的旧记录的标志位的步骤,其中,1≤S≤P;

若读取的所述P个旧文件中,所述第R条新记录的RowKey所对应的旧 记录的标志位均为0,则确定所述新文件中第R条新记录的标志位为0。

本发明的一些实施例中,处理器503还执行如下步骤:

在将P个旧文件合并为一个新文件后,删除所述P个旧文件。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘 等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1