CN103914462A - 一种数据存储和查询方法以及装置 - Google Patents
一种数据存储和查询方法以及装置 Download PDFInfo
- Publication number
- CN103914462A CN103914462A CN201210592932.0A CN201210592932A CN103914462A CN 103914462 A CN103914462 A CN 103914462A CN 201210592932 A CN201210592932 A CN 201210592932A CN 103914462 A CN103914462 A CN 103914462A
- Authority
- CN
- China
- Prior art keywords
- data
- row
- value
- data block
- primary key
- 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/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据存储和查询方法以及装置。该方法包括:确定单位批量待存储数据的每个列所需的数据块个数、大小和取值范围并为每个列初始化存储空间;按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各行取值有序排列、且各个数据块存储的取值之间也有序排列;存储同一行数据中各个列之间的存储位置引用关系信息。应用本发明能够提高大批量用户并发执行查询操作时的并发操作吞吐率。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种数据存储和查询方法以及装置。
背景技术
在互联网、通信等领域中,常常需要执行大批量数据的存储或查询任务。这些大批量数据的存储或查询任务的应用场景可以粗略地分为有实时性要求的应用场景和面向离线分析的应用场景。
在有实时性要求的应用场景中存在着一种更具体的应用场景,即大量用户并发进行排序查询或者取前N个结果的查询,其中N是自然数,本申请讨论该种更具体的应用场景下的数据存储和查询的技术方案。
目前,在对大批量数据进行存储时,一般预先定义每行数据的主键列,根据每行数据的主键列的取值确定用于存储每行数据的数据行,并且在同一行中存储同一行数据的所有列的取值。因此,在对除了主键列以外的其他列进行排序查询或者取前N个结果的查询时,需要遍历存储的所有数据行,并从每行数据中查询该列的值,对所有的该列取值进行排序,再根据排序结果反馈查询结果。
可见,基于目前的数据存储和查询方法,在进行排序查询或者取前N个结果的查询时,每一次查询都需要遍历所有数据行,并且需要对所有数据行中被查询的列的取值进行排序,耗费的查询时间较多,特别是在大批量用户并发执行查询操作时,将导致并发操作的吞吐率较低。
发明内容
有鉴于此,本申请提供了一种数据存储和查询方法和装置,能够减小在进行排序查询或者取前N个结果时所需的查询时间,提高大批量用户并发执行查询操作时的并发操作吞吐率。
一种数据存储方法,该方法包括:
确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
存储同一行数据中各个列之间的存储位置引用关系信息。
一种数据查询方法,该方法包括:
接收携带有目标列数据的查询范围信息和排序信息的查询请求,根据所述查询范围信息确定当前查询的单位批量数据,根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
一种数据存储装置,该装置包括初始化模块、存储位置确定模块、取值存储模块和引用存储模块;
所述初始化模块,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
所述存储位置确定模块,用于按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置;
所述取值存储模块,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
所述引用存储模块,用于存储同一行数据中各个列之间的存储位置引用关系信息。
一种数据查询装置,该装置包括接收模块、单位批量数据确定模块和查询结果获取模块;
所述接收模块,用于接收携带有目标列数据的查询范围信息和排序信息的查询请求;
所述单位批量数据确定模块,用于根据所述查询范围信息确定当前查询的单位批量数据;
所述查询结果获取模块,用于根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
由上述方案可见,本发明对于每个单位批量的待存储数据,根据单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小以及每个数据块存储的取值范围信息,为每个列初始化存储空间,按照单位批量待存储数据的各行数据的同一列的取值所属的取值范围,以及同一取值范围内各取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列。
可见,本发明对于待存储数据行目的每个列的取值,都是按照排序顺序进行存储的,因此,在进行数据的任意列的排序查询或前N个结果的查询时,可以直接根据该列的存储空间内各个数据块存储的取值之间的顺序以及每个数据内的各个取值之间的顺序获取查询结果,而无须在每次查询时都遍历该列的所有数据并进行排序工作,能够大大缩短具有排序需求的信息查询所需的查询时间,进而能够提高大批量用户并发执行查询操作时的并发操作吞吐率。
并且,由于各个数据块存储的取值之间也是有序排列的,在写入数据时可以根据待存储数据行目中每列的取值确定每列取值所在的数据块,进而根据与块内已存储数据的排序关系确定每列的取值的块内地址,因此,本发明在写入数据时由于不断写入新数据而更新数据之间的排序关系可以只在数据块内进行,并且由于每个数据块都已经初始化了足够的空间,因此尽量避免了数据块的***,进而尽量避免了将数据块内的数移动到其他数据块内,因此能够减小由于数据排序和移动数据所消耗的写入时间,在提高带有排序需求的信息查询的响应速度的同时,还能保证较快的数据写入速度。
附图说明
图1是本发明提供的数据存储方法流程图。
图2是本发明提供的写入一行待存储数据的流程图。
图3是本发明提供的数据存储结构示意图。
图4是本发明提供的数据查询方法流程图。
图5是本发明提供的数据存储装置结构图。
图6是本发明提供的数据查询装置结构图。
具体实施方式
图1是本发明提供的数据存储方法流程图。
如图1所示,该方法包括:
步骤101,确定单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小。
本步骤还确定每个数据块存储的取值的范围信息。
其中,本发明所述的取值范围信息,可以是取值本身的范围信息,比如将取值本身为90-100的取值确定为属于一个取值范围。也可以是从其他维度确定的取值所属的范围信息。例如对于某一列取值,在某一时段内产生的该列取值可以属于同一取值范围,且该列取值的排列顺序也是按照时间顺序进行的,比如按照通话的开始时间对拨打电话的号码进行排序、以及确定某时段内拔打电话的号码。
步骤102,根据所述数据块个数和每个数据块的大小为单位批量待存储数据的每个列初始化存储空间。
本步骤还进一步根据每个数据块存储的取值的范围信息为每个列初始化存储空间,例如,存储每个数据块存储的取值范围信息等。
步骤103,按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,即使得数据块内数据有序存放,且数据块间整体也是有序的,并存储同一行数据中各个列之间的存储位置引用关系信息。
其中,本发明所述的有序排列可以采用多种方法实现,例如可以采用链表的方式实现有序排列,或者采用为数据块内每个存储的数据标注序号的方式实现数据块内的有序排列、并通过标注数据块之间的标号实现数据块间的有序排列,或者按照存储位置之间的地址顺序依次存储相应顺序的数据从而实现有序排列。
其中,本发明所述的单位批量,可以依据实际的排序查询需求采用不同的方法进行定义,例如,当排序查询需求为需要查询某段时间内的排序关系时,所述单位批量可以是一个单位时间段内产生的数据量,比如一天内产生的数据量,当排序查询请求为需要查询某个号码段内的排序关系时,所述单位批量可以是一个单位号码段内产生的数据量。
图1所示方法中,通过执行步骤103,可以实现对于待存储数据行目的每个列的取值都按照排序顺序进行存储,因此,在进行数据的任意列的排序查询或前N个结果的查询时,可以直接根据该列的存储空间内各个数据块存储的取值之间的顺序以及每个数据内的各个取值之间的顺序获取查询结果,而无须在每次查询时都遍历该列的所有数据并进行排序工作,能够大大缩短具有排序需求的信息查询所需的查询时间,并且,由于各个数据块存储的取值之间也是有序排列的,在写入数据时可以根据待存储数据行目中每列的取值确定每列取值所在的数据块,进而根据与块内已存储数据的排序关系确定每列的取值的块内地址,因此,本发明在写入数据时由于不断写入新数据而更新数据之间的排序关系可以只在数据块内进行,可以进一步缩短查询时间。
另外,通过在步骤103之前还执行步骤101和步骤102,由于每个数据块都已经初始化了足够的空间,因此尽量避免了数据块的***,进而避免了将数据块内的数移动到其他数据块内,因此能够减小由于数据排序和移动数据所消耗的写入时间。
综上,图1所示方法在提高带有排序需求的信息查询的响应速度的同时,还能保证较快的数据写入速度。
图1所示方法中,在确定单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小时,可以根据以往单位批量数据的每个列所需的存储空间、和/或对单位批量待存储数据的每个列所需的存储空间产生影响的因素信息,确定当前的单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小。还可以进一步确定预留空间大小,根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间,使得每个数据块都有足够的预留空间,尽量避免数据块的***。
产生待存储数据以后,待存储数据一般以数据流的形式逐行进入数据存储***,数据存储***将接收的待存储数据逐行写入存储空间内,下面以写入一行待存储数据为例,对图1所示方法中写入数据的流程进行示例性介绍,具体请参考图2。
图2是本发明提供的写入一行待存储数据的流程图。
如图2所示,该流程包括:
步骤201,接收一行待存储数据。
步骤202,解析该行数据的主键列的取值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、且在所述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值。
步骤203,在步骤202确定出的所述数据块的所述位置处存储该行待存储数据的主键列取值。
步骤204,解析该行数据的非主键列的取值,根据该行数据的所述非主键列的取值所属的取值范围确定用于存储该行数据的所述非主键列的取值的数据块的ID、根据该行数据的所述非主键列的取值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键列的取值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键列的取值。
步骤205,在步骤204确定出的所述数据块的所述位置处存储该行数据的相应非主键列的取值。
步骤206,在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
其中,步骤206通过存储同一行数据中各个列之间的存储位置引用关系,可以根据其中任意一列数据查找到属于同一行数据的其他列数据,例如,根据某一行数据的一个非主键列取值所在的存储位置,检索该存储位置对应的主键列取值所在的数据块ID和数据块内的位置,从主键列取值所在的位置处读取主键列取值,并根据主键列所在的存储位置检索其他非主键列所在的数据块ID,从其他非主键列所在的数据块内检索指向该主键列所在存储位置的非主键列取值,即检索出其存储的主键列取值所在的数据块ID和数据块内的位置与该主键列所在存储位置相同的非主键列取值。
下面以从时间维度划分单位批量数据和单位批量数据内的数据块为例,对本发明的数据存储结构进行示例性介绍,具体请参见图3。
图3是本发明提供的数据存储结构示意图。
如图3所示,该数据存储结构中,包括单位时段内划分的各个子时段对应的数据块信息表,其中存储了每个子时段对应的数据块的信息(图3仅示出了子时段1的数据块的信息和子时段2的数据块的信息),具体可以包括对应的数据块标号、数据块起始地址、数据块大小等。
图3所示的子时段1的数据块,实际上包含了主键列对应的数据块和非主键列对应的数据块,其中,主键列对应的数据块内存储了主键列取值、以及与该主键列取值属于同一行数据的其他非主键列的引用信息,非主键列对应的数据块内存储了非主键列取值、以及与该非主键列取值属于同一行数据的主键列引用信息,每个主键列取值都对应了唯一的数据行编号,如图中的行1和行2(行编号可以由数据在数据块中存放的位置推得,无需占用存储空间),子时段1的数据块内存储每行数据的时间戳,具体可以对应每个主键列取值存储该主键列取值所在的数据行的时间戳。
另外,虽然本发明已经为每个数据块都初始化了足够的空间,从而尽量避免数据块的***,然后,为了适应异常情况等造成的数据块***情况,本发明还提出,如果数据块已满,则将该数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移至新增的数据块内,并更新所述存储位置引用关系信息,例如,在数据块已满时,将数据块内的数据均分为两份,其中的一份仍然存储在所述数据块中,另一份移至新增的数据块内,并更新相应的存储位置引用关系信息,具备包括更新主键列取值存储位置对应的非主键列引用信息中的非主键列所在的数据块ID等信息。
本发明还提供了一种数据查询方法,具体请参见图4。
图4是本发明提供的数据查询方法流程图。
如图4所示,该方法包括:
步骤401,接收携带有目标列数据的查询范围信息和排序信息的查询请求。
步骤402,根据所述查询范围信息确定当前查询的单位批量数据。
步骤403,根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果。
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
其中,依据所述排序信息获取查询结果具体可以包括:
依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
其中,当查询范围信息涵盖了两个以上单位批量的数据时,则依据所述排序信息获取查询结果包括:
根据当前查询的每个单位批量数据的所述目标列的存储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
例如,每个单位批量的数据为一天内产生的数据量,而需要查询的是第1-5天内产生的数据中,某一非主键列的取值排在前100名的数据行,则在查询时,可以先从第1-5天中每天产生的数据量中提取所述非主键列的取值排在前100名的数据行,然后对提取的500个所述非主键列的取值重新排序,获得排在前100的所述非主键列的取值,进而提取相应的数据行。
采用本发明,既可满足针对各非主键列或主键列的精确定位查询,也可满足面向选取前N(top N)类型的查询。由于前者操作较为简单,下面仅示例性地描述后者的查询过程。假设对于CDR表,查询要求返回CDR表中request_num最大的100行记录。首先找到request_num对应列的字段存储块的数据块信息,确定每个数据块中包括多少行request_num记录,假设每个数据块中包括了5行request_num记录。如果所有块都满,则只需取前5个数据块即可。当存在预留空间的配置时,需要在这个结果的基础上夺取20%(即配置的预留空间大小)的数据块,在本例中取前6个数据块。如果在前6个block中仍未发现足够多的记录,则继续查询更多的数据块,直到满足结果行数为止。
为了提高查询速度,可以将查询频率较高的数据放在内存中,将其他数据放在持久化存储装置中,例如,当内存仅够容纳一天的数据时,则当第二天产生的数据入库时,需要将内存数据备份至持久化存储装置。当用户查询数据时,如果查询条件为当天数据,则直接访问内存进行查询,如果用户查询条件为历史数据(非当天),则访问硬盘查询。
考虑到SSD存储设备对随机读和顺序写的支持较好,本申请提出的数据存储、查询***,非常适用于SSD存储设备。当内存无法容纳更多数据的时候,将当前内存的数据批量写入SSD存储,并更新每个数据块的地址信息等。查询时则根据查询数据所在的时间段,选择从内存或者SSD存储中获取数据,如果查询的数据范围跨越了内存和后台存储器,则分别从内存和后台存储器中获取结果后再合并结果。
图5是本发明提供的数据存储装置结构图。
如图5所示,该装置包括初始化模块501、存储位置确定模块502、取值存储模块503和引用存储模块504。
初始化模块501,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间。
存储位置确定模块502,用于按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置。
取值存储模块503,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列。
引用存储模块504,用于存储同一行数据中各个列之间的存储位置引用关系信息。
其中,取值存储模块503,具体可以用于每接收一行待存储数据,解析该行数据的主键列的取值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、且在所述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值,解析该行数据的非主键列的取值,根据该行数据的所述非主键列的取值所属的取值范围确定用于存储该行数据的所述非主键列的取值的数据块的ID、根据该行数据的所述非主键列的取值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键列的取值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键列的取值。
引用存储模块504,具体可以用于在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
取值存储模块503,可以用于将已满的数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移至新增的数据块内。
引用存储模块504,具体可以用于在所述取值存储模块移动数据时更新所述存储位置引用关系信息。
初始化模块501,可以用于根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。
图6是本发明提供的数据查询装置结构图。
如图6所示,该装置包括接收模块601、单位批量数据确定模块602和查询结果获取模块603。
接收模块601,用于接收携带有目标列数据的查询范围信息和排序信息的查询请求。
单位批量数据确定模块602,用于根据所述查询范围信息确定当前查询的单位批量数据。
查询结果获取模块603,用于根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果。
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
查询结果获取模块603,具体可以用于依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
单位批量数据确定模块602,用于根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据。
查询结果获取模块603,用于根据当前查询的每个单位批量数据的所述目标列的存储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
其中,所述目标列包括非主键列,和/或,所述单位批量数据包括单位时段内产生的数据。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (18)
1.一种数据存储方法,其特征在于,该方法包括:
确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
存储同一行数据中各个列之间的存储位置引用关系信息。
2.根据权利要求1所述的方法,其特征在于,在相应数据块的相应位置处存储所述各行数据的该列的取值包括:
接收一行待存储数据,解析该行数据的主键列的取值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、且在所述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值;
解析该行数据的非主键列的取值,根据该行数据的所述非主键列的取值所属的取值范围确定用于存储该行数据的所述非主键列的取值的数据块的ID、根据该行数据的所述非主键列的取值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键列的取值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键列的取值;
所述存储同一行数据中各个列之间的存储位置引用关系信息包括:
在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
3.根据权利要求1所述的方法,其特征在于,该方法还包括:
如果数据块已满,则将该数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移至新增的数据块内,并更新所述存储位置引用关系信息。
4.根据权利要求1所述的方法,其特征在于,确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息包括:
根据以往单位批量数据的每个列所需的存储空间、和/或对单位批量待存储数据的每个列所需的存储空间产生影响的因素信息,确定当前的单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息。
5.根据权利要求1或4所述的方法,其特征在于,所述初始化存储空间包括:
确定预留空间大小,根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。
6.根据权利要求1所述的方法,其特征在于,所述单位批量待存储数据包括单位时段内产生的待存储数据。
7.一种数据查询方法,其特征在于,该方法包括:
接收携带有目标列数据的查询范围信息和排序信息的查询请求;
根据所述查询范围信息确定当前查询的单位批量数据,根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
8.根据权利要求7所述的方法,其特征在于,依据所述排序信息获取查询结果包括:
依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
9.根据权利要求7所述的方法,其特征在于,根据所述查询范围信息确定当前查询的单位批量数据包括:根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据;
依据所述排序信息获取查询结果包括:
根据当前查询的每个单位批量数据的所述目标列的存储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
10.根据权利要求7所述的方法,其特征在于,
所述目标列包括非主键列,和/或,所述单位批量数据包括单位天数内产生的数据。
11.一种数据存储装置,其特征在于,该装置包括初始化模块、存储位置确定模块、取值存储模块和引用存储模块;
所述初始化模块,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
所述存储位置确定模块,用于按照单位批量待存储数据的各行数据的同一列的取值所属的范围、以及同一取值范围内各行数据的同一列的取值之间的排序关系,确定该列的存储空间中分别用于存储所述各行数据的该列的取值的数据块的ID和数据块内的位置;
所述取值存储模块,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该列的取值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
所述引用存储模块,用于存储同一行数据中各个列之间的存储位置引用关系信息。
12.根据权利要求11所述的装置,其特征在于,
所述取值存储模块,用于每接收一行待存储数据,解析该行数据的主键列的取值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、且在所述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值,解析该行数据的非主键列的取值,根据该行数据的所述非主键列的取值所属的取值范围确定用于存储该行数据的所述非主键列的取值的数据块的ID、根据该行数据的所述非主键列的取值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键列的取值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键列的取值;
所述引用存储模块,用于在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
13.根据权利要求11所述的装置,其特征在于,
所述取值存储模块,用于将已满的数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移至新增的数据块内;
所述引用存储模块,用于在所述取值存储模块移动数据时更新所述存储位置引用关系信息。
14.根据权利要求11所述的装置,其特征在于,
所述初始化模块,用于根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。
15.一种数据查询装置,其特征在于,该装置包括接收模块、单位批量数据确定模块和查询结果获取模块;
所述接收模块,用于接收携带有目标列数据的查询范围信息和排序信息的查询请求;
所述单位批量数据确定模块,用于根据所述查询范围信息确定当前查询的单位批量数据;
所述查询结果获取模块,用于根据当前查询的单位批量数据的所述目标列的存储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个列的存储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
16.根据权利要求15所述的装置,其特征在于,
所述查询结果获取模块,用于依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
17.根据权利要求15所述的装置,其特征在于,
所述单位批量数据确定模块,根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据;
所述查询结果获取模块,用于根据当前查询的每个单位批量数据的所述目标列的存储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
18.根据权利要求15所述的装置,其特征在于,
所述目标列包括非主键列,和/或,所述单位批量数据包括单位时段内产生的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210592932.0A CN103914462B (zh) | 2012-12-31 | 2012-12-31 | 一种数据存储和查询方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210592932.0A CN103914462B (zh) | 2012-12-31 | 2012-12-31 | 一种数据存储和查询方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103914462A true CN103914462A (zh) | 2014-07-09 |
CN103914462B CN103914462B (zh) | 2017-09-05 |
Family
ID=51040156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210592932.0A Active CN103914462B (zh) | 2012-12-31 | 2012-12-31 | 一种数据存储和查询方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103914462B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376119A (zh) * | 2014-12-03 | 2015-02-25 | 天津南大通用数据技术股份有限公司 | 一种适应超大规模列存数据库的数据访问方法及装置 |
CN104657513A (zh) * | 2015-03-20 | 2015-05-27 | 烟台威尔数据***有限公司 | 嵌入式***中档案操作与快速检索方法 |
CN105677683A (zh) * | 2014-11-21 | 2016-06-15 | 华为技术有限公司 | 批量数据查询方法和装置 |
CN108255882A (zh) * | 2016-12-29 | 2018-07-06 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN108572788A (zh) * | 2017-03-13 | 2018-09-25 | 广州市动景计算机科技有限公司 | 数据存取方法、装置及*** |
CN112073174A (zh) * | 2020-07-28 | 2020-12-11 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互*** |
CN112085644A (zh) * | 2019-06-12 | 2020-12-15 | 上海赜睿信息科技有限公司 | 多列数据排序方法、装置、可读存储介质和电子设备 |
CN112445776A (zh) * | 2020-11-20 | 2021-03-05 | 北京易观智库网络科技有限公司 | 基于Presto的动态分桶方法、***、设备及可读存储介质 |
WO2024103599A1 (zh) * | 2022-11-17 | 2024-05-23 | 浪潮电子信息产业股份有限公司 | 一种数据查询方法、***、装置、设备及非易失性可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001134598A (ja) * | 1999-11-08 | 2001-05-18 | Nippon Telegr & Teleph Corp <Ntt> | T木インデックス構築方法及びt木インデックス検索方法及びt木インデックス構築装置及びt木インデックス検索装置及びt木インデックス構築プログラムを格納した記憶媒体及びt木インデックス検索プログラムを格納した記憶媒体 |
US20040122794A1 (en) * | 2002-12-20 | 2004-06-24 | International Business Machines Corporation | System and method for multicolumn sorting in a single column |
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
-
2012
- 2012-12-31 CN CN201210592932.0A patent/CN103914462B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001134598A (ja) * | 1999-11-08 | 2001-05-18 | Nippon Telegr & Teleph Corp <Ntt> | T木インデックス構築方法及びt木インデックス検索方法及びt木インデックス構築装置及びt木インデックス検索装置及びt木インデックス構築プログラムを格納した記憶媒体及びt木インデックス検索プログラムを格納した記憶媒体 |
US20040122794A1 (en) * | 2002-12-20 | 2004-06-24 | International Business Machines Corporation | System and method for multicolumn sorting in a single column |
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105677683B (zh) * | 2014-11-21 | 2018-12-14 | 华为技术有限公司 | 批量数据查询方法和装置 |
US10769147B2 (en) | 2014-11-21 | 2020-09-08 | Huawei Technologies Co., Ltd. | Batch data query method and apparatus |
CN105677683A (zh) * | 2014-11-21 | 2016-06-15 | 华为技术有限公司 | 批量数据查询方法和装置 |
CN104376119A (zh) * | 2014-12-03 | 2015-02-25 | 天津南大通用数据技术股份有限公司 | 一种适应超大规模列存数据库的数据访问方法及装置 |
CN104657513B (zh) * | 2015-03-20 | 2018-02-09 | 山东威尔数据股份有限公司 | 嵌入式***中档案操作与快速检索方法 |
CN104657513A (zh) * | 2015-03-20 | 2015-05-27 | 烟台威尔数据***有限公司 | 嵌入式***中档案操作与快速检索方法 |
CN108255882A (zh) * | 2016-12-29 | 2018-07-06 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN108572788A (zh) * | 2017-03-13 | 2018-09-25 | 广州市动景计算机科技有限公司 | 数据存取方法、装置及*** |
CN112085644A (zh) * | 2019-06-12 | 2020-12-15 | 上海赜睿信息科技有限公司 | 多列数据排序方法、装置、可读存储介质和电子设备 |
CN112085644B (zh) * | 2019-06-12 | 2024-05-14 | 上海赜睿信息科技有限公司 | 多列数据排序方法、装置、可读存储介质和电子设备 |
CN112073174A (zh) * | 2020-07-28 | 2020-12-11 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互*** |
CN112073174B (zh) * | 2020-07-28 | 2023-06-27 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互*** |
CN112445776A (zh) * | 2020-11-20 | 2021-03-05 | 北京易观智库网络科技有限公司 | 基于Presto的动态分桶方法、***、设备及可读存储介质 |
CN112445776B (zh) * | 2020-11-20 | 2022-12-20 | 北京易观智库网络科技有限公司 | 基于Presto的动态分桶方法、***、设备及可读存储介质 |
WO2024103599A1 (zh) * | 2022-11-17 | 2024-05-23 | 浪潮电子信息产业股份有限公司 | 一种数据查询方法、***、装置、设备及非易失性可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103914462B (zh) | 2017-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103914462A (zh) | 一种数据存储和查询方法以及装置 | |
CN101346000B (zh) | 基于gps和移动终端的提供本地移动地理信息服务的*** | |
CN102725753B (zh) | 优化数据访问的方法及装置、优化数据存储的方法及装置 | |
CN102779138B (zh) | 实时数据的硬盘存取方法 | |
KR101740271B1 (ko) | 온라인 상에서 실시간으로 업데이트되는 대규모 오디오 핑거프린트 데이터베이스의 구축 방법 및 장치 | |
CN107798135B (zh) | 分页查询方法及装置和电子设备 | |
CN104268159A (zh) | 一种基于动态镜像的实时数据仓库数据预存取方法 | |
CN104346458A (zh) | 数据存储方法和存储设备 | |
CN103544261A (zh) | 一种海量结构化日志数据全局索引管理方法及装置 | |
CN106649412B (zh) | 一种数据处理方法和设备 | |
CN105243169A (zh) | 一种数据查询方法及*** | |
CN105224532A (zh) | 数据处理方法及装置 | |
CN101093482A (zh) | 一种大量信息存储和检索的方法 | |
CN110647542B (zh) | 一种数据获取方法和装置 | |
CN103942209A (zh) | 数据处理方法 | |
CN107330024A (zh) | 标签***数据的存储方法和装置 | |
CN108268216A (zh) | 数据处理方法、装置及服务器 | |
CN102129619A (zh) | 一种基于云存储的业务数据处理方法及*** | |
CN110737747A (zh) | 一种数据操作方法、装置及*** | |
CN111488323B (zh) | 一种数据处理方法、装置及电子设备 | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
CN103559307A (zh) | 一种查询的缓存方法及装置 | |
CN104765782A (zh) | 一种索引排序更新方法及装置 | |
CN104834719A (zh) | 应用于实时大数据场景下的数据库*** | |
CN104754555A (zh) | 一种号码回填的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |