平码五不中公式规律
  • / 17
  • 下载费用:30 金币  

一种数据存储和查询方法以及装置.pdf

关 键 ?#21097;?/dt>
一种 数据 存储 查询 方法 以及 装置
  专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
摘要
申请专利号:

CN201210592932.0

申请日:

2012.12.31

公开号:

CN103914462A

公开日:

2014.07.09

当前法律状态:

授权

有效性:

有权

法?#19978;?#24773;: 授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20121231|||公开
IPC分类号: G06F17/30 主分类号: G06F17/30
申请人: 中国移动通信集团公司
发明人: 齐骥; 高峰; 钱岭; 秦平; 张宝海
地址: 100032 北京市西城区金融大街29号B座十二层
优先权:
专利代理机构: 北京德琦知识产权代理有限公司 11018 代理人: 张玉波;宋志强
PDF完整版下载: PDF下载
法律状态
申请(专利)号:

CN201210592932.0

授权公告号:

||||||

法律状态公告日:

2017.09.05|||2014.08.06|||2014.07.09

法律状态类型:

授权|||实质审查的生效|||公开

摘要

本申请公开了一种数据存储和查询方法以及装置。该方法包括:确定单位批量待存储数据的每个列所需的数据块个数、大小和取值范围并为每个列初始化存储空间;按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各行取值有序排列、且各个数据块存储的取值之间也有序排列;存储同一行数据中各个列之间的存储位置引用关系信息。应用本发明能够提高大批量用户并发执行查询操作时的并发操作吞吐率。

权利要求书

权利要求书
1.  一种数据存储方法,其特征在于,该方法包括:
确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
存储同一行数据中各个列之间的存储位置引用关系信息。

2.  根据权利要求1所述的方法,其特征在于,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值包括:
接收一行待存储数据,解析该行数据的主键?#26800;?#21462;值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、?#20197;?#25152;述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值;
解析该行数据的非主键?#26800;?#21462;值,根据该行数据的所述非主键?#26800;?#21462;值所属的取值范围确定用于存储该行数据的所述非主键?#26800;?#21462;值的数据块的ID、根据该行数据的所述非主键?#26800;?#21462;值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键?#26800;?#21462;值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键?#26800;?#21462;值;
所述存储同一行数据中各个列之间的存储位置引用关系信息包括:
在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。

3.  根据权利要求1所述的方法,其特征在于,该方法还包括:
如果数据块已满,则将该数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移?#21015;?#22686;的数据块内,并更?#28388;?#36848;存储位置引用关系 信息。

4.  根据权利要求1所述的方法,其特征在于,确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息包括:
根据以往单位批量数据的每个列所需的存储空间、和/或对单位批量待存储数据的每个列所需的存储空间产生影响的因素信息,确定当前的单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息。

5.  根据权利要求1或4所述的方法,其特征在于,所述初始化存储空间包括:
确定预留空间大小,根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。

6.  根据权利要求1所述的方法,其特征在于,所述单位批量待存储数据包括单位时?#25991;?#20135;生的待存储数据。

7.  一种数据查询方法,其特征在于,该方法包括:
接收携带有目标列数据的查询范围信息和排序信息的查询请求;
根据所述查询范围信息确定当前查询的单位批量数据,根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。

8.  根据权利要求7所述的方法,其特征在于,依据所述排序信息获取查询结果包括:
依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。

9.  根据权利要求7所述的方法,其特征在于,根据所述查询范围信息确定当前查询的单位批量数据包括:根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据;
依据所述排序信息获取查询结果包括:
根据当前查询的每个单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批 量数据获取的所有候选查询结果获取最终的查询结果。

10.  根据权利要求7所述的方法,其特征在于,
所述目标列包括非主键列,和/或,所述单位批量数据包括单位天数内产生的数据。

11.  一种数据存储装置,其特征在于,该装置包括初始化模块、存储位置确定模块、取值存储模块和引用存储模块;
所述初始化模块,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
所述存储位置确定模块,用于按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置;
所述取值存储模块,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
所述引用存储模块,用于存储同一行数据中各个列之间的存储位置引用关系信息。

12.  根据权利要求11所述的装置,其特征在于,
所述取值存储模块,用于每接收一行待存储数据,解析该行数据的主键?#26800;?#21462;值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、?#20197;?#25152;述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值,解析该行数据的非主键?#26800;?#21462;值,根据该行数据的所述非主键?#26800;?#21462;值所属的取值范围确定用于存储该行数据的所述非主键?#26800;?#21462;值的数据块的ID、根据该行数据的所述非主键?#26800;?#21462;值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键?#26800;?#21462;值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键?#26800;?#21462;值;
所述引用存储模块,用于在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。

13.  根据权利要求11所述的装置,其特征在于,
所述取值存储模块,用于将已满的数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移?#21015;?#22686;的数据块内;
所述引用存储模块,用于在所述取值存储模块移动数据?#22791;滤?#36848;存储位置引用关系信息。

14.  根据权利要求11所述的装置,其特征在于,
所述初始化模块,用于根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。

15.  一种数据查询装置,其特征在于,该装置包括接收模块、单位批量数据确定模块和查询结果获取模块;
所述接收模块,用于接收携带有目标列数据的查询范围信息和排序信息的查询请求;
所述单位批量数据确定模块,用于根据所述查询范围信息确定当前查询的单位批量数据;
所述查询结果获取模块,用于根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。

16.  根据权利要求15所述的装置,其特征在于,
所述查询结果获取模块,用于依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。

17.  根据权利要求15所述的装置,其特征在于,
所述单位批量数据确定模块,根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据;
所述查询结果获取模块,用于根据当前查询的每个单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。

18.  根据权利要求15所述的装置,其特征在于,
所述目标列包括非主键列,和/或,所述单位批量数据包括单位时?#25991;?#20135;生的数据。

说明书

说明书一种数据存储和查询方法以及装置
技术领域
本申请涉及数据处理技术领域,尤其涉及一种数据存储和查询方法以及装置。
背景技术
在互联网、通信等领域中,常常需要执行大批量数据的存储或查询任务。这些大批量数据的存储或查询任务的应用场景可以粗略地分为有实时性要求的应用场景和面向离线分析的应用场景。
在有实时性要求的应用场景中存在着一种更具体的应用场景,即大量用户并发进?#20449;?#24207;查询或者取前N个结果的查询,其中N是自然数,本申请讨论该种更具体的应用场景下的数据存储和查询的技术方案。
目前,在对大批量数据进行存储时,一般预先定义每行数据的主键列,根据每行数据的主键?#26800;?#21462;值确定用于存储每行数据的数据行,并?#20197;?#21516;一行中存储同一行数据的所有?#26800;?#21462;值。因此,在对除了主键列以外的其他列进?#20449;?#24207;查询或者取前N个结果的查询时,需要遍历存储的所有数据行,并?#29992;?#34892;数据中查询该?#26800;?#20540;,?#36816;?#26377;的该列取值进?#20449;?#24207;,再根据排序结果反馈查询结果。
可见,基于目前的数据存储和查询方法,在进?#20449;?#24207;查询或者取前N个结果的查询时,每一次查询都需要遍历所有数据行,并且需要?#36816;?#26377;数据行中被查询的?#26800;?#21462;值进?#20449;?#24207;,耗费的查询时间较多,特别是在大批量用户并发执行查询操作时,将导致并发操作的吞吐率?#31995;汀?
发明内容
有鉴于此,本申请提供了一种数据存储和查询方法和装置,能够减小在进?#20449;?#24207;查询或者取前N个结果时所需的查询时间,提高大批量用户并发执行查询操作时的并发操作吞吐率。
一种数据存储方法,该方法包括:
确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息,根据所述数据块个数、每个数据块的大小和每个数据 块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
存储同一行数据中各个列之间的存储位置引用关系信息。
一种数据查询方法,该方法包括:
接收携带有目标列数据的查询范围信息和排序信息的查询请求,根据所述查询范围信息确定当前查询的单位批量数据,根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
一种数据存储装置,该装置包括初始化模块、存储位置确定模块、取值存储模块和引用存储模块;
所述初始化模块,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间;
所述存储位置确定模块,用于按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置;
所述取值存储模块,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列;
所述引用存储模块,用于存储同一行数据中各个列之间的存储位置引用关系信息。
一种数据查询装置,该装置包括接收模块、单位批量数据确定模块和查询结果获取模块;
所述接收模块,用于接收携带有目标列数据的查询范围信息和排序信息的查询请 求;
所述单位批量数据确定模块,用于根据所述查询范围信息确定当前查询的单位批量数据;
所述查询结果获取模块,用于根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果;
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
由上述方案可见,本发明对于每个单位批量的待存储数据,根据单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小以及每个数据块存储的取值范围信息,为每个列初始化存储空间,按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的取值范围,以及同一取值范围内各取值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列。
可见,本发明对于待存储数据行目的每个?#26800;?#21462;值,都是按?#24352;?#24207;顺序进行存储的,因此,在进行数据的?#25105;飭械?#25490;序查询或前N个结果的查询时,可以直接根据该?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序以及每个数据内的各个取值之间的顺序获取查询结果,而无须在每次查询时都遍历该?#26800;?#25152;有数据并进?#20449;?#24207;工作,能够大大缩短具?#20449;?#24207;需求的信息查询所需的查询时间,进而能够提高大批量用户并发执行查询操作时的并发操作吞吐率。
并且,由于各个数据块存储的取值之间也是有序排?#26800;模?#22312;写入数据时可以根据待存储数据行目中每?#26800;?#21462;值确定每列取值所在的数据块,进而根据与块内已存储数据的排序关系确定每?#26800;?#21462;值的块内地址,因此,本发明在写入数据时由于不断写入新数据而更新数据之间的排序关系可以只在数据块内进行,并且由于每个数据块?#23478;?#32463;初始化了足够的空间,因?#21496;?#37327;避免了数据块的分裂,进而尽量避免?#31169;?#25968;据块内的数移动到其他数据块内,因此能够减小由于数据排序和移动数据所消耗的写入时间,在提高带?#20449;?#24207;需求的信息查询的响应速度的同时,还能保证较快的数据写入速度。
附图说明
图1是本发明提供的数据存储方法流程图。
图2是本发明提供的写入一行待存储数据的流程图。
图3是本发明提供的数据存储结构示意图。
图4是本发明提供的数据查询方法流程图。
图5是本发明提供的数据存储装置结构图。
图6是本发明提供的数据查询装置结构图。
具体实施方式
图1是本发明提供的数据存储方法流程图。
如图1所示,该方法包括:
?#34903;?01,确定单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小。
本?#34903;?#36824;确定每个数据块存储的取值的范围信息。
其中,本发明所述的取值范围信息,可以是取值本身的范围信息,?#28909;?#23558;取值本身为90-100的取值确定为属于一个取值范围。也可以是从其他维度确定的取值所属的范围信息。例如对于某一列取值,在某一时?#25991;?#20135;生的该列取值可以属于同一取值范围,且该列取值的排列顺序也是按照时间顺序进?#26800;模热?#25353;照通话的开始时间对拨打电话的号码进?#20449;?#24207;、以及确定某时?#25991;詘未?#30005;话的号码。
?#34903;?02,根据所述数据块个数和每个数据块的大小为单位批量待存储数据的每个列初始化存储空间。
本?#34903;?#36824;进一步根据每个数据块存储的取值的范围信息为每个列初始化存储空间,例如,存储每个数据块存储的取值范围信息?#21462;?
?#34903;?03,按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,即使得数据块内数据有序存放,且数据块间整体也是有序的,并存储同一行数据中各个列之间的存储位置引用关系信息。
其中,本发明所述的有序排列可以采用多种方法实现,例如可以采用链表的方式实现有序排列,或者采用为数据块内每个存储的数据标注序号的方式实现数据块内的有序排列、并通过标注数据块之间的标号实现数据块间的 有序排列,或者按照存储位置之间的地址顺序依次存储相应顺序的数据从而实现有序排列。
其中,本发明所述的单位批量,可以依据实际的排序查询需求采用不同的方法进行定义,例如,当排序查询需求为需要查询某段时间内的排序关系时,所述单位批量可以是一个单位时间?#25991;?#20135;生的数据量,?#28909;?#19968;天内产生的数据量,当排序查询请求为需要查询某个号码?#25991;?#30340;排序关系时,所述单位批量可以是一个单位号码?#25991;?#20135;生的数据量。
图1所示方法中,通过执行?#34903;?03,可以实现对于待存储数据行目的每个?#26800;?#21462;值?#21450;湊张?#24207;顺序进行存储,因此,在进行数据的?#25105;飭械?#25490;序查询或前N个结果的查询时,可以直接根据该?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序以及每个数据内的各个取值之间的顺序获取查询结果,而无须在每次查询时都遍历该?#26800;?#25152;有数据并进?#20449;?#24207;工作,能够大大缩短具?#20449;?#24207;需求的信息查询所需的查询时间,并且,由于各个数据块存储的取值之间也是有序排?#26800;模?#22312;写入数据时可以根据待存储数据行目中每?#26800;?#21462;值确定每列取值所在的数据块,进而根据与块内已存储数据的排序关系确定每?#26800;?#21462;值的块内地址,因此,本发明在写入数据时由于不断写入新数据而更新数据之间的排序关系可以只在数据块内进行,可以进一步缩短查询时间。
另外,通过在?#34903;?03之前还执行?#34903;?01和?#34903;?02,由于每个数据块?#23478;?#32463;初始化了足够的空间,因?#21496;?#37327;避免了数据块的分裂,进而避免?#31169;?#25968;据块内的数移动到其他数据块内,因此能够减小由于数据排序和移动数据所消耗的写入时间。
综上,图1所示方法在提高带?#20449;?#24207;需求的信息查询的响应速度的同时,还能保证较快的数据写入速度。
图1所示方法中,在确定单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小时,可以根据以往单位批量数据的每个列所需的存储空间、和/或对单位批量待存储数据的每个列所需的存储空间产生影响的因素信息,确定当前的单位批量待存储数据的每个列所需的数据块个数和每个数据块的大小。还可以进一步确定预留空间大小,根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间,使得每个数据块都有足够的预留空间,尽量避免数据块的分?#36873;?
产生待存储数据以后,待存储数据一般以数据流的形?#34903;?#34892;进入数据存储系?#24120;?#25968;据存储系统将接收的待存储数据逐行写入存储空间内,下面以写 入一行待存储数据为例,对图1所示方法中写入数据的流程进行示例性介绍,具体请参考图2。
图2是本发明提供的写入一行待存储数据的流程图。
如图2所示,该流程包括:
?#34903;?01,接收一行待存储数据。
?#34903;?02,解析该行数据的主键?#26800;?#21462;值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、?#20197;?#25152;述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值。
?#34903;?03,在?#34903;?02确定出的所述数据块的所述位置处存储该行待存储数据的主键列取值。
?#34903;?04,解析该行数据的非主键?#26800;?#21462;值,根据该行数据的所述非主键?#26800;?#21462;值所属的取值范围确定用于存储该行数据的所述非主键?#26800;?#21462;值的数据块的ID、根据该行数据的所述非主键?#26800;?#21462;值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键?#26800;?#21462;值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非主键?#26800;?#21462;值。
?#34903;?05,在?#34903;?04确定出的所述数据块的所述位置处存储该行数据的相应非主键?#26800;?#21462;值。
?#34903;?06,在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
其中,?#34903;?06通过存储同一行数据中各个列之间的存储位置引用关系,可以根据其中?#25105;?#19968;列数据查?#19994;?#23646;于同一行数据的其他列数据,例如,根据某一行数据的一个非主键列取值所在的存储位置,检索该存储位置对应的主键列取值所在的数据块ID和数据块内的位置,从主键列取值所在的位置处读取主键列取值,并根据主键列所在的存储位置检索其他非主键列所在的数据块ID,从其他非主键列所在的数据块内检索指向该主键列所在存储位置的非主键列取值,即检索出其存储的主键列取值所在的数据块ID和数据块内的位置与该主键列所在存储位置相同的非主键列取值。
下面以从时间维度划分单位批量数据和单位批量数据内的数据块为例,对本发明的数据存储结构进行示例性介绍,具体请参见图3。
图3是本发明提供的数据存储结构示意图。
如图3所示,该数据存储结构中,包括单位时?#25991;?#21010;分的各个子时段对应的数据块信息表,其中存储了每个子时段对应的数据块的信息(图3仅示出了子时段1的数据块的信息和子时段2的数据块的信息),具体可以包括对应的数据块标号、数据块起始地址、数据块大小?#21462;?
图3所?#38236;?#23376;时段1的数据块,实际上包含了主键列对应的数据块和非主键列对应的数据块,其中,主键列对应的数据块内存储了主键列取值、以及与该主键列取值属于同一行数据的其他非主键?#26800;?#24341;用信息,非主键列对应的数据块内存储了非主键列取值、以及与该非主键列取值属于同一行数据的主键列引用信息,每个主键列取值都对应?#23435;?#19968;的数据行编号,如图中的行1和行2(行编号可以由数据在数据块中存放的位置推得,无需?#21152;?#23384;储空间),子时段1的数据块内存储每行数据的时间戳,具体可以对应每个主键列取值存储该主键列取值所在的数据?#26800;?#26102;间戳。
另外,虽然本发明已经为每个数据块都初始化了足够的空间,从而尽量避免数据块的分裂,然后,为了适应异常情况等造成的数据块分裂情况,本发明?#22266;?#20986;,如果数据块已满,则将该数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移?#21015;?#22686;的数据块内,并更?#28388;?#36848;存储位置引用关系信息,例如,在数据块已满时,将数据块内的数据均分为两份,其中的一份仍然存储在所述数据块中,另一份移?#21015;?#22686;的数据块内,并更新相应的存储位置引用关系信息,具备包括更新主键列取值存储位置对应的非主键列引用信息中的非主键列所在的数据块ID等信息。
本发明?#22266;?#20379;了一种数据查询方法,具体请参见图4。
图4是本发明提供的数据查询方法流程图。
如图4所示,该方法包括:
?#34903;?01,接收携带有目标列数据的查询范围信息和排序信息的查询请求。
?#34903;?02,根据所述查询范围信息确定当前查询的单位批量数据。
?#34903;?03,根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果。
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间 内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值范围之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
其中,依据所述排序信息获取查询结果具体可以包括:
依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
其中,当查询范围信息涵盖了两个以上单位批量的数据时,则依据所述排序信息获取查询结果包括:
根据当前查询的每个单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
例如,每个单位批量的数据为一天内产生的数据量,而需要查询的是第1-5天内产生的数据中,某一非主键?#26800;?#21462;值排在前100名的数据行,则在查询时,可以先从第1-5天中每天产生的数据量中提取所述非主键?#26800;?#21462;值排在前100名的数据行,然后对提取的500个所述非主键?#26800;?#21462;值重新排序,获得排在前100的所述非主键?#26800;?#21462;值,进而提取相应的数据?#23567;?
采用本发明,既可满足针对各非主键列或主键?#26800;?#31934;确定位查询,也可满足面向选取前N(top N)类型的查询。由于前者操作较为简单,下面仅示例性地描述后者的查询过程。假设对于CDR表,查询要求返回CDR表中request_num最大的100行记录。首?#26085;业絩equest_num对应?#26800;?#23383;段存储块的数据块信息,确定每个数据块中包括多少行request_num记录,假设每个数据块中包括了5行request_num记录。如果所有块都满,则只需取前5个数据块即可。当存在预留空间的配置时,需要在这个结果的基础上夺取20%(即配置的预留空间大小)的数据块,在本例中取前6个数据块。如果在前6个block中仍未发现足够多的记录,则继续查询更多的数据块,直到满足结果行数为止。
为了提高查询速度,可以将查询?#24503;?#36739;高的数据放在内存中,将其他数据放在持久化存储装置中,例如,当内存仅够容纳一天的数据时,则当第二天产生的数据入库时,需要将内存数据备份至持久化存储装置。当用户查询数据时,如果查询条件为当天数据,则直接访问内存进行查询,如果用户查询条件为历史数据(非当天),则访 问硬盘查询。
考虑到SSD存储设备?#36816;?#26426;读和顺序写的支持较好,本申请提出的数据存储、查询系?#24120;?#38750;常适用于SSD存储设备。当内存无法容纳更多数据的时候,将当前内存的数据批量写入SSD存储,并更新每个数据块的地址信息?#21462;?#26597;询时则根据查询数据所在的时间段,选择从内存或者SSD存储中获取数据,如果查询的数据范围跨越了内存和后台存储器,则分别从内存和后台存储器中获取结果后再合并结果。
图5是本发明提供的数据存储装置结构图。
如图5所示,该装置包括初始化模块501、存储位置确定模块502、取值存储模块503和引用存储模块504。
初始化模块501,用于确定单位批量待存储数据的每个列所需的数据块个数、每个数据块的大小和每个数据块存储的取值范围信息,根据所述数据块个数、每个数据块的大小和每个数据块存储的取值的范围信息为单位批量待存储数据的每个列初始化存储空间。
存储位置确定模块502,用于按照单位批量待存储数据的各行数据的同一?#26800;?#21462;值所属的范围、以及同一取值范围内各行数据的同一?#26800;?#21462;值之间的排序关系,确定该?#26800;?#23384;储空间中分别用于存储所述各行数据的该?#26800;?#21462;值的数据块的ID和数据块内的位置。
取值存储模块503,用于根据所述存储位置确定模块确定出的数据块ID和数据块内的位置信息,在相应数据块的相应位置处存储所述各行数据的该?#26800;?#21462;值,使得同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列。
引用存储模块504,用于存储同一行数据中各个列之间的存储位置引用关系信息。
其中,取值存储模块503,具体可以用于每接收一行待存储数据,解析该行数据的主键?#26800;?#21462;值,根据该行数据的主键列取值所属的取值范围确定用于存储该行数据的主键列取值的数据块的标识(ID),根据该行数据的主键列取值与和该行数据属于同一单位批量的、?#20197;?#25152;述数据块内已存储的主键列取值的排序关系,确定该行数据的主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行待存储数据的主键列取值,解析该行数据的非主键?#26800;?#21462;值,根据该行数据的所述非主键?#26800;?#21462;值所属的取值范围确定用于存储该行数据的所述非主键?#26800;?#21462;值的数据块的ID、根据该行数据的所述非主键?#26800;?#21462;值与和该行数据属于同一单位批量的、已存储在该数据块内的其他行数据的所述非主键?#26800;?#21462;值的排序关系,确定用于存储该行数据的所述非主键列取值在该数据块内的位置,在所述数据块的所述位置处存储该行数据的所述非 主键?#26800;?#21462;值。
引用存储模块504,具体可以用于在该行数据的主键列取值的存储位置对应的非主键列引用位置存储该行数据的每个非主键列取值所在的数据块ID,在该行数据的每个非主键列取值的存储位置对应的主键列引用位置存储该行数据的主键列取值所在的数据块ID和数据块内的位置。
取值存储模块503,可以用于将已满的数据块内的数据分为至少两份,其中的一份仍然存储在所述数据块中,将剩余的其他份移?#21015;?#22686;的数据块内。
引用存储模块504,具体可以用于在所述取值存储模块移动数据?#22791;滤?#36848;存储位置引用关系信息。
初始化模块501,可以用于根据确定出的每个数据块的大小与预留空间大小的加和结果为每个数据块初始化存储空间。
图6是本发明提供的数据查询装置结构图。
如图6所示,该装置包括接收模块601、单位批量数据确定模块602和查询结果获取模块603。
接收模块601,用于接收携带有目标列数据的查询范围信息和排序信息的查询请求。
单位批量数据确定模块602,用于根据所述查询范围信息确定当前查询的单位批量数据。
查询结果获取模块603,用于根据当前查询的单位批量数据的所述目标?#26800;?#23384;储空间内各个数据块存储的取值之间的顺序、以及每个数据块内的各个取值之间的顺序,依据所述排序信息获取查询结果。
其中,单位批量数据中的各个列分别有自己的存储空间,每个?#26800;?#23384;储空间内包括一个以上的数据块,同一个数据块内的各个取值有序排列、且各个数据块存储的取值之间也有序排列,还存储有同一行数据中各个列之间的存储位置引用关系信息。
查询结果获取模块603,具体可以用于依据所述排序信息获取目标列数据的查询结果,依据所述目标列数据的查询结果的存储位置和所述存储位置引用关系信息,获取与所述目标列数据的查询结果属于同一行数据的其他列数据的存储位置信息,从所述其他列数据的存储位置获取所述其他列数据。
单位批量数据确定模块602,用于根据所述查询范围信息确定出当前查询的单位批量数据包括两个以上单位批量的数据。
查询结果获取模块603,用于根据当前查询的每个单位批量数据的所述目标列 的存储空间内各个数据块存储的取值范围之间的顺序、以及每个数据块内的各个取值之间的顺序,从当前查询的每个单位批量数据中依据所述排序信息获取候选查询结果,根据从当前查询的所有单位批量数据获取的所有候选查询结果获取最终的查询结果。
其中,所述目标列包括非主键列,和/或,所述单位批量数据包括单位时?#25991;?#20135;生的数据。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

关于本文
本文标题:一种数据存储和查询方法以及装置.pdf
链接地址:http://www.pqiex.tw/p-6115885.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备17046363号-1 
 


收起
展开
平码五不中公式规律 板球多少球赢 最赚钱的买卖是开寺庙 魔兽世界2.43野外赚钱 彩发发下载v0.1.0 不在海上赚钱的供奉妈祖行吗 北京单场怎么投注 全民玩捕鱼官网 凯天娱乐官方网站 波克捕鱼租号怎么赚钱 双色球走势图投注