CN111611250A - 数据存储设备、数据查询方法、装置、服务器及存储介质 - Google Patents
数据存储设备、数据查询方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN111611250A CN111611250A CN202010635548.9A CN202010635548A CN111611250A CN 111611250 A CN111611250 A CN 111611250A CN 202010635548 A CN202010635548 A CN 202010635548A CN 111611250 A CN111611250 A CN 111611250A
- Authority
- CN
- China
- Prior art keywords
- target
- data
- data block
- column
- query
- 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.)
- Pending
Links
Images
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
- G06F16/2228—Indexing structures
-
- 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
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/24—Querying
- G06F16/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据存储设备、数据查询方法、装置、服务器及存储介质,属于数据库领域。数据查询方法包括:接收数据查询请求;响应于数据查询请求用于查询第一数据项,基于偏移索引或列值索引,确定满足查询条件的目标一级数据块;从目标一级数据块中确定满足查询条件的目标二级数据块;从目标二级数据块中确定满足查询条件的目标列存单元;从目标列存单元中确定目标查询内容,目标查询内容为目标列值所属的行号,或,属于目标行号的列值。本申请实施例在查询条件对应的值范围较广时,减少了扫描次数,提高了查询效率,使服务器能够根据查询条件和索引逐级定位数据块,从数据块中确定出符合查询条件的数据,进一步提高了数据查询效率。
Description
技术领域
本申请实施例涉及数据库领域,特别涉及一种数据存储设备、数据查询方法、装置、服务器及存储介质。
背景技术
数据库(Database)可视为存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
相关技术中,为了提高对数据进行随机读取的效率,通常采用列存结合倒排索引的方式存储数据,并采用算数压缩编码等方式压缩存储列数据。数据查询时,计算机设备根据查询条件中包含的列值或行标识缓存对应的完整数据列,并对该数据列进行筛选,得到查询结果。
然而,若采用相关技术中的数据存储方式,在查询数据时需要缓存对应的数据列,当查询条件中的列值或行标识所命中的数据列较多时,设备缓存以及解压缩数据耗时长,查询效率低且设备的数据处理负担重。
发明内容
本申请实施例提供了一种数据存储设备、数据查询方法、装置、服务器及存储介质,能够在查询数据时减少扫描次数,提高了查询效率,同时能够减少索引占据的数据存储资源。所述技术方案如下:
一方面,本申请实施例提供了一种数据存储设备,所述数据存储设备存储有数据表中第一数据项对应的第一列存,所述数据表中的行数据按照所述第一数据项的值排序:
所述第一列存的列存结构中包括:列存单元、一级数据块信息、二级数据块信息、偏移索引和列值索引;
所述列存单元中包含列值以及列值对应的起始行号;
所述一级数据块信息中包含一级数据块标识、一级数据块起始行号以及第一起始列值索引之间的对应关系,所述第一起始列值索引为一级数据块对应起始列值在所述列存单元中的索引,所述一级数据块由至少一个二级数据块构成;
所述二级数据块信息中包含二级数据块标识、所属一级数据块的一级数据块标识、二级数据块起始行号以及第二起始列值索引之间的对应关系,所述第二起始列值索引为二级数据块对应起始列值在所述列存单元中的索引,所述二级数据块由至少一个所述列存单元构成;
所述偏移索引中包含所述一级数据块标识与所述一级数据块起始行号之间的对应关系;
所述列值索引中包含所述一级数据块标识与一级数据块起始列值之间的对应关系。
另一方面,本申请实施例提供了一种数据查询方法,用于从上述方面所述数据存储设备中查询数据,所述方法包括:
接收数据查询请求,所述数据查询请求中包含查询条件,所述查询条件为目标列值或目标行号;
响应于所述数据查询请求用于查询所述第一数据项,基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块;
从所述目标一级数据块中确定满足所述查询条件的目标二级数据块;
从所述目标二级数据块中确定满足所述查询条件的目标列存单元;
从所述目标列存单元中确定目标查询内容,所述目标查询内容为所述目标列值所属的行号,或,属于所述目标行号的列值。
另一方面,本申请实施例提供了一种数据查询装置,用于从上述方面所述数据存储设备中查询数据,所述装置包括:
接收模块,用于接收数据查询请求,所述数据查询请求中包含查询条件,所述查询条件为目标列值或目标行号;
第一确定模块,用于响应于所述数据查询请求用于查询所述第一数据项,基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块;
第二确定模块,用于从所述目标一级数据块中确定满足所述查询条件的目标二级数据块;
第三确定模块,用于从所述目标二级数据块中确定满足所述查询条件的目标列存单元;
第四确定模块,用于从所述目标列存单元中确定目标查询内容,所述目标查询内容为所述目标列值所属的行号,或,属于所述目标行号的列值。
另一方面,本申请实施例提供了一种服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述第二方面所述的数据查询方法。
另一方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述第二方面所述的数据查询方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该服务器执行上述方面的各种可选实现方式中提供的数据查询方法。
本申请实施例提供的技术方案的有益效果至少包括:
本申请实施例中,由于列存单元排序存储,因此相近的列值集中存储,当随机查询过程中查询条件对应的值范围较广时,减少了扫描次数,提高了查询效率;并且在列存单元的基础上划分两级数据块,每级数据块对应有数据块信息,能够指示数据块的起始位置、起始值以及与其它级别数据块的包含关系,并从行号和列值两个角度为一级数据块设置索引,使得服务器能够根据查询条件和索引逐级定位数据块,最终从数据块中确定出符合查询条件的数据,进一步提高了数据查询效率。
附图说明
图1是相关技术提供的数据存储结构和数据查询流程的示意图;
图2是根据本申请一示例性实施例提供的数据存储结构和数据查询流程的示意图;
图3是根据本申请一示例性实施例提供的第一数据项的数据存储结构的示意图;
图4是根据本申请一示例性实施例提供的第一数据项写入过程示意图;
图5是根据本申请另一示例性实施例提供的第一数据项写入过程示意图;
图6是根据本申请一示例性实施例提供的第二数据项的数据存储结构的示意图;
图7是根据本申请一示例性实施例提供的数据查询方法的流程图;
图8是根据本申请一示例性实施例提供的数据查询过程的示意图;
图9是根据本申请另一示例性实施例提供的数据查询过程的示意图;
图10是根据本申请另一示例性实施例提供的数据查询方法的流程图;
图11是本申请实施例提供的数据存储结构与相关技术的数据存储结构对应的数据查询性能对比图;
图12是本申请实施例提供的数据存储方法与相关技术的数据存储方法的CPU使用率对比图;
图13是本申请实施例提供的数据存储方法与相关技术的数据存储方法的网络I/O量对比图;
图14是根据本申请一示例性实施例提供的数据查询内存分配的柱状图;
图15是根据相关技术中的数据查询方法提供的数据查询内存分配的柱状图;
图16是根据本申请一示例性实施例提供的第二数据项的数据压缩结果示意图;
图17是根据本申请一示例性实施例提供的第二数据项的数据读取缓存占比示意图;
图18是根据本申请一示例性实施例提供的第二数据项的查询耗时示意图;
图19是是根据本申请一示例性实施例提供的数据查询装置的结构框图;
图20是根据本申请一示例性实施例提供的服务器的结构框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
相关技术中,数据存储设备采用倒排索引和列存结合的方式存储主键数据项,数据存储设备存储有主键数据项的数值以及各个数值在列存中的行标识。在数据查询过程中,数据存储设备根据查询条件中包含的主键数据项的数值,以及其他数据项的数值,通过倒排检索的方式确定出命中的列存以及查询结果对应的目标数据的列存,将各个列存缓存到内存中。根据查询条件中各个数据项的数值得到对应的行标识列表,由于列存通常采用定长编码的方式存储数据,因此可以根据行标识列表确定目标数据项在目标列存中的位置,从而提取得到目标数据项。
如图1所示,查询条件为满足主键数据项(expid)为71000和79289,第一指标数据项(sitesetid)为25以及第二指标数据项(producetypeid)为12的行,目标查询内容为满足查询条件的行对应的目标数据项(bucketid)的列值。服务器根据查询条件从数据存储设备中查询expid的列存101、sitesetid的列存102、producetypeid的列存103以及bucketid的列存105。由于需要将查询结果的expid和bucketid发送至上层计算引擎,因此服务器将expid的列存101和bucketid的列存105缓存至内存中,根据查询条件的expid、sitesetid和producetypeid对应的行标识取交集,得到行标识列表104。服务器根据行标识列表104从内存中的列存101中提取expid,并从列存105中提取bucketid。
然而,若采用相关技术中主键数据项的数据存储结构,数据存储设备需要将完整的expid的列存和bucketid的列存缓存到内存中,才能够提取数据项,并且当查询条件中涉及的数据项较多时,涉及到的数据项所在行范围较广,且分布较散乱,需要多次扫描才能查询到对应行标识,随机输入/输出(Input/Output,I/O)量大,数据查询效率低。此外,这种编码方式的压缩率低,需要的存储空间大。
为了解决上述技术问题,本申请实施例提供了一种数据存储设备和数据查询方法。如图2所示,数据存储设备中,expid按序排列并存储在第一列存201中,第一列存的各个列存单元(valuemeta)包含相应的列值(value)和起始行标识(startrowid),数据存储设备将第一列存101划分为一级数据块(round),并将各个一级数据块进一步划分得到二级数据块(block),一个一级数据块对应至少一个二级数据块。数据存储设备中存储有二级数据块信息和一级数据块信息,并且存储有包含一级数据块与列存单元对应关系的列值索引(ValueIndex)和偏移索引(OffsetIndex),便于服务器查询数据时快速定位查询条件对应的列存单元。服务器根据查询条件确定出第一列存201、sitesetid的列存202、producetypeid的列存203以及bucketid的列存205,根据查询条件中的expid、sitesetid和producetypeid对应的行标识取交集,得到行标识列表204。在此过程中,服务器只需根据查询条件中的列值和列值索引确定出第一列存的目标一级数据块(目标round),并根据一级数据块信息和二级数据块信息确定出目标二级数据块(目标block),并将目标二级数据块缓存至内存中,展开得到目标列值的行标识(rowrange),再根据得到的行标识确定bucketid的列值。本申请实施例中,服务器只需确定出少数的目标二级数据块即可得到查询结果,服务器无需多次扫描第一列存,提高了数据查询效率;并且服务器只需缓存目标二级数据块,不需要缓存完整的第一列存,减少了数据查询所占用的内存。
下面对本申请实施例的数据存储设备中的数据存储结构进行说明。
数据存储设备存储有数据表中第一数据项对应的第一列存(expid),数据表中的行数据按照第一数据项的值排序。如图3所示,数据存储设备存储有第一列存301。
在一种可能的实施方式中,数据存储设备中第一数据项的值按一定顺序排列存储,例如按由小到大的顺序存储。由于数据表中其他数据项与第一数据项具有逻辑对应关系,因此数据表中的行数据按照第一数据项的值对应排序存储。
示意性的,请参考图4,其示出了一种第一数据项的写入过程。数据表中第一数据项的原始数据为0,7,1,1,0,8,8,7,7,8,7,8,7,8,8,7。数据存储设备首先对第一数据项的值由小到大进行排序,得到排序后的第一数据项[0,0,1,1,7,7,7,7,7,7,8,8,8,8,8,8]。
如图3所示,第一列存301的列存结构中包括:列存单元、一级数据块信息302、二级数据块信息303、偏移索引(OffsetIndex)304和列值索引(ValueIndex)305。
其中,列存单元中包含列值以及列值对应的起始行号。数据存储设备将第一列存划分为一级数据块,将一级数据块划分为至少一个二级数据块,偏移索引304和列值索引305用于对一级数据块进行索引。
其中,列存单元是用于存储第一数据项的基础数据单元。由于第一数据项排序后导致大小相等的数据项集中,因此为了减少第一数据项所需的存储空间,数据存储设备利用列存单元表示大小相等的第一数据项及对应的存储位置。
可选地,列存单元中包含有列值以及列值对应的起始行号,该起始行号用于指示该列值对应的第一个第一数据项所在的行。
示意性的,如图4所示,将排序后的第一数据项以列存单元的形式写入新存储,并生成第一列存的列存结构401。其中,列存单元为[0,0],[1,2],[7,4],[8,10],不同的列存单元存储不同值的第一数据项,并按照第一数据项的值排列。
一级数据块信息中包含一级数据块标识(roundid)、一级数据块起始行号(baserowid)以及第一起始列值索引(startvalueindex)之间的对应关系,第一起始列值索引为一级数据块对应起始列值在列存单元中的索引,一级数据块由至少一个二级数据块构成。
在一种可能的实施方式中,为了能够快速查找列存单元,数据存储设备将列存单元划分为两级数据块,利用数据块信息进行索引。
可选地,数据存储设备将一个第一列存划分为一个一级数据块,并对该一级数据块进一步划分,得到二级数据块,同时生成一级数据块信息和二级数据块信息。相邻两个一级数据块中,前一个一级数据块的最后一行与后一个一级数据块的最后一行相邻。一级数据块信息中包含一级数据块起始行号和第一起始列值索引,方便数据存储设备根据行号或列值查询数据。
示意性的,如图4所示,对于第一数据项[0,0,1,1,7,7,7,7,7,7,8,8,8,8,8,8],划分为一个一级数据块,对应的一级数据块信息为[0,0,0],即第0个一级数据块,起始于第0行,第一个列值属于第0个列值单元。
二级数据块信息中包含所属一级数据块的一级数据块标识、二级数据块标识(blockid)、二级数据块起始行号(blockrowid)以及第二起始列值索引(startvalueindex)之间的对应关系,第二起始列值索引为二级数据块对应起始列值在所述列存单元中的索引,二级数据块由至少一个列存单元构成。
在一种可能的实施方式中,由于一级数据块包含的列存单元数量大,无法高效地查询到列存单元,数据存储设备以预定列存单元个数划分一级数据块,得到至少一个二级数据块。
可选地,数据存储设备以16k个列存单元为一个二级数据块划分一级数据块;或者根据一级数据块中列存单元的个数动态调整划分方式,本申请实施例中对此不作限定。为了使数据存储设备能够高效地查询数据,其生成的二级数据信息中包含所属一级数据块的一级数据块标识,从而建立一级数据块与二级数据块之间的索引。此外,二级数据块信息中还包含有二级数据块起始行号和起始列值索引,方便数据存储设备根据行号或列值查询数据。
示意性的,如图4所示,数据存储设备以3个列存单元为一个二级数据块划分一级数据块。因此,第0个二级数据块包含前三个列存单元,二级数据块信息为[0,0,0,0];第1个二级数据块包含最后一个列存单元,二级数据块信息为[0,1,10,3],即所属一级数据块的一级数据块标识为0,所属一级数据块中的第1个二级数据块,第一个列值的起始行号为10,第一个列值属于第3个列值单元。
偏移索引中包含一级数据块标识与一级数据块起始行号之间的对应关系。列值索引中包含一级数据块标识与一级数据块起始列值之间的对应关系。
在一种可能的实施方式中,为了方便快速定位一级数据块,避免扫描一级数据块导致查询时间较长的情况,数据存储设备中还存储有对于一级数据块的索引,包括从行号对一级数据块进行索引的偏移索引,以及从列值对一级数据块进行索引的数值索引。
示意性的,如图4所示,第0个一级数据块对应的偏移索引为[0,0],即第0个一级数据块,一级数据块起始行号为0;第0个一级数据块对应的数值索引为[0,0],即第0个一级数据块,一级数据块起始数值为0。
综上所述,本申请实施例中,由于列存单元排序存储,因此相近的列值集中存储,当随机查询过程中查询条件对应的值范围较广时,减少了扫描次数,提高了查询效率;并且在列存单元的基础上划分两级数据块,每级数据块对应有数据块信息,能够指示数据块的起始位置、起始值以及与其它级别数据块的包含关系,并从行号和列值两个角度为一级数据块设置索引,使得服务器能够根据查询条件和索引逐级定位数据块,最终从数据块中确定出符合查询条件的数据,进一步提高了数据查询效率。
在另一种可能的实施方式中,数据表中含有多个第一数据项,数据存储设备对各个第一数据项建立索引,并且根据各个第一数据项的排序优先级进行排序。例如,先将等级高的第一数据项a进行排序,在排序后的第一数据项a的基础上对等级次之的第一数据项b进行排序,并相应调整第一数据项a的位置。
示意性的,请参考图5,其示出了一种数据表中两个第一数据项的写入过程。数据存储设备首先对等级高的第一数据项a进行排序,从第一数据项a的原始数据[0,7,1,1,0,8,8,7,7,8,7,8,7,8,8,7],变换为排序后的第一数据项a[0,0,1,1,7,7,7,7,7,7,8,8,8,8,8,8]。再对第一数据项a中相同值对应的第一数据项b按由小到大的顺序进行排序,从第一数据项b的原始数据[1,2,2,2,2,1,1,1,2,1,1,4,1,1,4,3],变换为排序后的第一数据项b[1,2,2,2,1,1,1,2,3,4,1,1,1,1,4,4]。
可选地,查询数据的过程中,数据存储设备通常要根据等级高的第一数据项的查询结果查询等级低的第一数据项,因此数据存储设备在存储数据时首先对等级高的第一数据项建立索引,再根据等级高的第一数据项的数据块对等级低的第一数据项进行划分和建立索引。
示意性的,如图5所示,数据存储设备得到第一数据项a的列存结构401后,根据列存结构401建立第一数据项b的列存结构501。数据存储结构在第一数据项a的列存单元的基础上建立第一数据项b的列存单元,即对应不同第一数据项a列值的第一数据项b位于不同的列存单元中,并且不同值的第一数据项b也位于不同的列存单元中。例如,对应第一数据项a列值为0、1、7、8的第一数据项b存储于不同的列存单元,而同样对应第一数据项a列值为0的第一数据项b,1与2存储于不同的列存单元。
可选地,数据存储设备根据第一数据项b对应的第一数据项a的列值划分一级数据块。例如,如图5所示,由于第一数据项a包含4种列值,因此第一数据项b对应有4个一级数据块。与第一数据项a相同,数据存储设备按照预定列存单元个数划分一级数据块,得到二级数据块。例如,如图5所示,数据存储设备以3个列存单元为一个二级数据块划分一级数据块,对于第2个一级数据块[2,4,4],由于包含有4个列存单元,因此被划分为两个二级数据块。同样地,数据存储设备对第一数据项b的第一列存b建立偏移索引和数值索引。
在一种可能的实施方式中,数据存储设备还存储有数据表中第二数据项对应的第二列存。
在一些实施例中,第一数据项为数据表中的主键数据项,第二数据项为数据表中除主键数据项以外的数据项,例如维度项和指标项等。相比于第一数据项,第二数据项的基数较大,数据存储设备根据第二数据项的特点对其进行分类压缩存储。
第二列存的列存结构中包括:元数据(metadata)和编码数据(blockdata),元数据由至少一个元数据块(metablock)构成,编码数据由至少一个编码数据块(datablock)构成,且元数据块与编码数据块一一对应。
其中,编码数据块中的编码数据根据压缩类型对原始数据压缩得到。
在一种可能的实施方式中,数据存储设备按照预定数据量划分根据第一数据项的值排序后的第二数据项,得到至少一个数据块,根据各个数据块中数据的特点,采用相应的压缩编码压缩数据块,得到编码数据块。为了方便查询第二数据项,数据存储设备中存储有编码数据对应的元数据。
元数据块中包含对应编码数据块的编码块元信息,编码块元信息包括编码块偏移(offset)、压缩尺寸(compressedsize)以及压缩类型(compressedtype)。
其中,编码块偏移用于指示编码数据块在第二列存中的起始位置,压缩尺寸为编码数据块的尺寸。
可选地,编码块元信息还包括编码数据的数据类型,用于指示编码数据块中原始数据的数据类型,例如整数类型(int)、长整型(long)和短整型(short)等。
在一种可能的实施方式中,由于数据存储设备按照预定数据量划分第二列存,例如每16k行为一个编码数据块,因此服务器需要根据目标行号以及编码数据中编码数据块的数据块大小,确定出目标编码数据块。例如,目标行号为6,数据存储设备将每3行划分为一个编码数据块,即编码数据块的数据块大小为3行,则确定出目标编码数据块为第2个编码数据块。
可选地,为了方便后续查询数据时能够快速定位并解压缩得到原始数据,数据存储设备通过编码块元信息中的编码块偏移指示编码数据块的起始位置,通过压缩尺寸指示编码数据块的数据大小,使服务器能够根据编码块偏移和压缩尺寸确定编码数据块在第二列存中的起始和结束位置,并根据编码块元信息中的压缩类型对编码数据块进行解压缩。可选地,编码块元信息中还包括原始数据的数据类型,方便服务器得到原始数据后根据数据类型对原始数据进行计算处理。
示意性的,请参考图6,其示出了一种第二列存的列存结构。该列存结构包括编码数据601和元数据602,且编码数据601的编码数据块与元数据602的元数据块一一对应。元数据602包含对应编码数据块的编码块元信息603,编码块元信息603包括编码块偏移、压缩尺寸、压缩类型以及数据类型(datatype)。
本申请实施例中,通过设置第二数据项的编码数据对应的元数据,存储编码数据块的编码块元信息,指示各个编码数据块的在第二列存中的位置和压缩类型,方便数据存储设备能够快速查询到第二数据项的存储位置,并且第二数据项分块存储,使得数据存储设备只需缓存并解压相应的编码数据块即可得到第二数据项,而不必解压完整的第二列存,并且可以根据元数据得知各个编码数据块的压缩方式,提高了数据解压缩的效率。
请参考图7,其示出了本申请一个示例性实施例提供的数据查询方法的流程图。本实施例以该方法用于具有数据查询功能的服务器为例进行说明,该方法包括如下步骤:
步骤701,接收数据查询请求,数据查询请求中包含查询条件,查询条件为目标列值或目标行号。
在一种可能的实施方式中,服务器接收数据查询请求,数据查询请求中包含查询条件和目标查询内容。其中,查询条件为目标列值或目标行号,目标查询内容为需要得到的数据项对应的列值或行号。可选地,数据查询请求中还包含有目标数据项,目标数据项为目标查询内容所属的数据项。
可选地,服务器根据查询条件中的目标列值查询目标列值对应的行号,以及对应的其他数据项的行号或列值;或者根据查询条件中的目标行号查询目标行号对应的列值,以及对应的其他数据项的行号或列值。
可选的,该服务器为上述实施例中的数据存储设备,或者是与数据存储设备连接的数据查询服务器。
步骤702,响应于数据查询请求用于查询第一数据项,基于偏移索引或列值索引,确定满足查询条件的目标一级数据块。
在一种可能的实施方式中,当数据查询请求中的查询内容为第一数据项时,利用第一数据项的偏移索引或列值索引,以及第一数据项的各级数据块信息进行查询。
可选地,服务器根据数据查询请求中的查询条件选取相应的索引,确定目标一级数据块。
在一种可能的实施方式中,步骤702包括如下步骤:
步骤一,响应于查询条件为目标列值,基于列值索引确定满足查询条件的目标一级数据块。
在一种可能的实施方式中,数据查询请求为根据第一数据项的目标列值查询该目标列值所属的行号。由于数据存储设备中,第一数据项分块存储,且存储有包含一级数据块标识与一级数据块起始列值对应关系的列值索引,因此数据存储设备首先依据目标列值遍历列值索引,确定目标列值所属的目标一级数据块。
步骤二,响应于查询条件为目标行号,基于偏移索引确定满足查询条件的目标一级数据块。
在一种可能的实施方式中,数据查询请求为根据第一数据项的目标行号查询该目标行号对应的列值。由于数据存储设备中,第一数据项分块存储,且存储有从行号对一级数据块进行索引的偏移索引,因此数据存储设备首先依据目标行号遍历偏移索引,确定目标行号所属的目标一级数据块。
步骤703,从目标一级数据块中确定满足查询条件的目标二级数据块。
在一种可能的实施方式中,为了进一步确定目标列值的位置或目标行号对应的列值,数据存储设备从目标一级数据块中筛选出满足查询条件的目标二级数据块。
可选的,数据存储设备依据二级数据块信息确定出目标一级数据块所包含的至少一个二级数据块。当确定出目标二级数据块后,数据存储设备将目标二级数据块缓存到内存中,以便后续展开相应的列存单元获取目标查询内容。
步骤704,从目标二级数据块中确定满足查询条件的目标列存单元。
在一种可能的实施方式中,当查询条件为目标列值时,数据存储设备依据目标列值以及各个列存单元所包含的列值,从目标二级数据块中确定出目标列值所包含的目标列存单元;当查询条件为目标行号时,数据存储设备依据目标行号以及各个列存单元所包含的起始行号,从目标二级数据块中确定出目标行号所对应的目标列存单元。
步骤705,从目标列存单元中确定目标查询内容,目标查询内容为目标列值所属的行号,或,属于目标行号的列值。
在一种可能的实施方式中,当数据存储设备确定出满足查询条件的目标列存单元时,从缓存的目标二级数据块中展开目标列存单元,获取目标查询内容。
可选地,当查询条件为目标列值时,数据存储设备根据目标列存单元所包含的起始行号得到目标列值所属的行号;当查询条件为目标行号时,数据存储设备根据目标列存单元所对应的列值得到目标行号的列值。
本申请实施例中,服务器根据查询条件以及偏移索引或列值索引,确定满足查询条件的目标一级数据块,并通过二分法进一步确定出目标二级数据块,由于第一数据项排序存储,因此查询条件对应的列存单元较为集中,只需确定出少数的目标二级数据块即可得到查询结果,服务器无需多次扫描第一列存,提高了数据查询效率;并且服务器只需缓存目标二级数据块,不需要缓存完整的第一列存,减少了数据查询所占用的内存。
在一种可能的实施方式中,当查询条件为第一数据项的目标列值,目标查询内容为该目标列值所属的行号时,上述数据查询方法的步骤702至步骤705包括如下步骤:
在一种可能的实施方式中,步骤702包括步骤702a:
步骤702a,根据列值索引中一级数据块起始列值和目标列值,确定目标一级数据块,其中,目标一级数据块的一级数据块起始列值小于等于目标列值,且目标一级数据块对应下一个一级数据块的一级数据块起始列值大于等于目标列值。
在一种可能的实施方式中,当查询条件为第一数据项的目标列值时,服务器获取一级数据块的列值索引。
可选地,由于列值索引中包含一级数据块标识以及一级数据块起始列值,因此服务器可以根据目标列值遍历列值索引,确定出目标列值所属的目标一级数据块。
在图4所示第一列存的基础上,示意性的,请参考图8,其示出了根据目标列值1查询目标列值所属的行号的示意图。查询条件中目标列值为1,服务器遍历列值索引,由于一级数据块0的起始列值为0,一级数据块1的起始列值为9,因此确定一级数据块0为目标一级数据块。
在一种可能的实施方式中,步骤703包括步骤703a和步骤703b:
步骤703a,从二级数据块信息中获取目标一级数据块下各个二级数据块的第二起始列值索引。
在一种可能的实施方式中,由于二级数据块信息中包含有各个二级数据块所属的一级数据块的一级数据块标识,因此服务器根据目标一级数据块的一级数据块标识,从二级数据块信息中筛选出目标一级数据块下的二级数据块。如图8所示,根据目标一级数据块的一级数据块标识0,确定出目标一级数据块下的二级数据块包含有二级数据块0和二级数据块1。
可选地,服务器从二级数据块信息中获取各个二级数据块的第二起始列值索引。示意性的,如图8所示,二级数据块0的第二起始列值索引为0,二级数据块1的第二起始列值索引为3。
步骤703b,根据第二起始列值索引对应的列值,通过二分法确定目标二级数据块,其中,目标二级数据块的二级数据块起始列值小于等于目标列值,且目标二级数据块对应下一个二级数据块的二级数据块起始列值大于等于目标列值。
在一种可能的实施方式中,服务器采取二分法确定目标二级数据块。即先确定出中间位置的二级数据块,通过比较该二级数据块的起始列值索引对应的列值与目标列值,确定目标列值属于前二分之一的一级数据块对应的二级数据块,或后二分之一的一级数据块对应的二级数据块,以此类推,直至确定出目标二级数据块。
如图8所示,由于二级数据块0的起始列值索引对应的列值为0,小于目标列值,二级数据块1的起始列值索引对应的列值为8,大于目标列值,因此确定二级数据块0为目标二级数据块。
在一种可能的实施方式中,步骤704包括步骤704a:
步骤704a,根据目标二级数据块中各个列存单元对应的列值,通过二分法确定目标列存单元,目标列存单元对应的列值为目标列值。
在一种可能的实施方式中,服务器同样采取二分法确定目标列存单元。如图8所示,由于列存单元1对应的列值为1,等于目标列值,因此确定列存单元1为目标列存单元。
在一种可能的实施方式中,步骤705包括步骤705a和步骤705b:
步骤705a,获取目标列存单元中列值对应的第一起始行号,以及目标列存单元后下一列存单元中列值对应的第二起始行号。
在一种可能的实施方式中,由于列存单元中只包含列值以及起始行号,并未包含该列存单元的结束行号,因此服务器需要根据目标列存单元的第一起始行号,以及目标列存单元后下一列存单元中列值对应的第二起始行号,确定出目标列值的范围,即目标列值所属的行号。
如图8所示,当服务器确定出列存单元1为目标列存单元时,获取列存单元1的起始行号2,以及列存单元2的起始行号4。
步骤705b,根据第一起始行号和第二起始行号,确定目标列值所属的行号。
在一种可能的实施方式中,服务器根据第一起始行号确定出目标列值的起始行号,根据第二起始行号确定出目标列值的结束行号,即目标列值的结束行号为第二起始行号的前一行对应的行号。如图8所示,第一起始行号为2,第二起始行号为4,因此确定目标列值所属的行号为2和3。
在另一种可能的实施方式中,当查询条件为第一数据项的目标行号时,上述数据查询方法的步骤702至步骤705包括如下步骤:
在一种可能的实施方式中,服务器根据查询条件中第一数据项的目标行号查询对应的列值。而实际数据查询过程中,服务器通常根据查询条件中第一数据项的目标列值查询第一主键数据的行号,再根据该行号查询对应的第二主键数据的列值。请参考图9,本申请实施例以根据第一主键数据的行号查询第二主键数据的列值为例进行说明。
在一种可能的实施方式中,步骤702包括步骤702b:
步骤702b,根据偏移索引中的一级数据块起始行号和目标行号,确定目标一级数据块,其中,目标行号属于目标一级数据块的行号范围。
在一种可能的实施方式中,服务器查询到第一主键数据中目标列值对应的目标行号后,根据该行号遍历第二主键数据对应第一列存的偏移索引,确定出目标行号所属的目标一级数据块。
示意性的,如图9所示,由于目标行号为2和3,一级数据块1的起始行号为2,一级数据块2的起始行号为4,因此确定一级数据块1为目标一级数据块。
在一种可能的实施方式中,步骤703包括步骤703c和步骤703d:
步骤703c,从二级数据块信息中获取目标一级数据块下各个二级数据块的二级数据块起始行号。
在一种可能的实施方式中,由于二级数据块信息中包含有各个二级数据块所属的一级数据块的一级数据块标识,因此服务器根据目标一级数据块的一级数据块标识,从二级数据块信息中筛选出目标一级数据块下的二级数据块。如图9所示,根据目标一级数据块的一级数据块标识1,确定出目标一级数据块下的二级数据块包含有二级数据块1。
可选地,服务器从二级数据块信息中获取各个二级数据块的二级数据块起始行号。示意性的,如图9所示,二级数据块1的二级数据块起始行号为2。
步骤703d,根据二级数据块起始行号,确定目标二级数据块,其中,目标行号属于目标二级数据块的行号范围。
在一种可能的实施方式中,服务器采取二分法确定目标二级数据块。即先确定出中间位置的二级数据块,通过比较该二级数据块的起始行号与目标行号,确定目标行号属于前二分之一的一级数据块对应的二级数据块,或后二分之一的一级数据块对应的二级数据块,以此类推,直至确定出目标二级数据块。
如图9所示,由于目标一级数据块中只包含一个二级数据块,因此直接将二级数据块1确定为目标二级数据块。
在一种可能的实施方式中,步骤704包括步骤704b:
步骤704b,根据目标二级数据块中各个列存单元对应列值的起始行号,确定目标列存单元,目标行号属于目标列存单元的行号范围。
在一种可能的实施方式中,服务器同样采取二分法确定目标列存单元。
如图9所示,由于列存单元2的起始行号为2,列存单元3的起始行号为4,大于目标行号,因此确定列存单元2为目标列存单元。
在一种可能的实施方式中,步骤705包括步骤705c:
步骤705c,从目标列存单元中提取目标行号对应的列值。
在一种可能的实施方式中,由于目标行号数量较多时可能命中多个目标列存单元,因此服务器确定出目标第二数据块后缓存目标第二数据库块,并将目标列存展开,根据目标行号提取对应的列值。如图9所示,由于目标列存单元包含的行号范围为2和3,因此将目标列存单元中的列值2确定为目标行号对应的列值。
由于第二数据项的压缩存储方式与第一数据项不同,因此当数据查询请求用于查询第二数据项时,服务器根据数据查询请求查询对应的编码数据,并根据编码数据的元数据进行解压得到原始数据。在一种可能的实施方式中,在图7的基础上,请参考图10,上述步骤701之后,数据查询方法还包括如下步骤:
步骤706,响应于数据查询请求用于查询第二数据项,缓存第二数据项对应的第二列存。
在一种可能的实施方式中,数据存储设备以列为单位存储第二数据项,即一列第二数据项集中压缩存储,因此服务器查询第二数据项时,需要将第二数据项对应的第二列存缓存至内存中。
可选地,由于存在部分查询频率较高的第二数据项,因此为了避免每一次查询时都需要缓存第二列存,服务器在查询结束后并不会立即清除内存中的第二列存,而是在内存中暂存第二列存。当距离最近一次查询第二列存中的第二数据项的时长达到预定时长时,服务器删除第二列存。并在下一次查询时重新缓存。
步骤707,根据第二列存中的元数据对编码数据进行解压,得到原始数据。
在一种可能的实施方式中,由于数据存储设备将第二列存分块存储,并且各个编码数据块的压缩方式可能不同,因此服务器根据元数据中包含的编码块元信息对编码数据进行解压。
在一种可能的实施方式中,步骤707包括如下步骤:
步骤一,根据目标行号以及编码数据中编码数据块的数据块大小,从编码数据中确定目标编码数据块,以及元数据中目标编码数据块对应的目标元数据块,数据块大小为编码数据块对应原始数据的行数。
在一种可能的实施方式中,由于数据存储设备按照预定数据量划分第二列存,例如每16k行为一个编码数据块,因此服务器需要根据目标行号以及编码数据中编码数据块的数据块大小,确定出目标编码数据块。例如,目标行号为6,数据存储设备将每3行划分为一个编码数据块,即编码数据块的数据块大小为3行,则确定出目标编码数据块为第2个编码数据块。
可选的,元数据中的编码块元信息中包含编码块偏移,服务器根据目标编码数据块获取对应的目标元数据块。
步骤二,根据目标元数据块中的编码块偏移和压缩尺寸,从编码数据中提取目标编码数据块。
在一种可能的实施方式中,服务器根据目标元数据块中的编码块偏移确定出目标编码数据块在第二列存中的起始位置,再根据目标元数据块中的压缩尺寸,确定出目标编码数据块在第二列存中的结束位置,从而提取目标编码数据块。
步骤三,根据目标元数据块中的压缩类型,对目标编码数据块进行解压,得到原始数据。
在一种可能的实施方式中,由于不同编码数据块的压缩类型可能不同,其对应采取的压缩方式也不同,因此服务器需要根据目标元数据块中的压缩类型,采取相应的解压缩方式对目标编码数据块进行解压,得到原始数据。
可选地,根据编码数据块的数据特征,数据存储设备中第二数据项的压缩类型包括第一压缩类型和第二压缩类型,第一压缩类型的压缩率高于第二压缩类型的压缩率。
其中,若原始数据中目标原始数据的占比达到第一阈值,或,原始数据中基数的占比小于第二阈值,原始数据采用第一压缩类型进行压缩,目标原始数据是至少两个前置比特位为0的数据。
其中,基数是指原始数据中所有互不相等的数值。例如,若原始数据为[0,1,2,2,2,4],则该原始数据的基数为[0,1,2,4]。
可选地,第一压缩类型为高压缩类型,对应的压缩编码方式为无损压缩算法(A.Lempel J.Ziv 4,LZ4)与位清洗(BitShuffle)压缩算法结合。
示意性的,若原始数据中至少两个前置比特位为0的数据的占比达到80%,或原始数据中基数占比小于20%时,原始数据采用第一压缩类型进行压缩。
可选地,当原始数据中的基数个数为1时,即该数据块中的原始数据都相同,此时数据存储设备采用第三压缩类型压缩原始数据,即直接记录该基数并在对应的元数据中记录对应的行。当原始数据都为空时,数据存储设备直接生成对应的元数据,并标记该段数据为空。
可选地,若原始数据中基数的占比大于第二阈值,且小于第三阈值,原始数据采用第二压缩类型进行压缩。
可选地,第二压缩类型为普通压缩,对应的压缩编码方式为只采用LZ4压缩算法。
示意性的,若原始数据中基数的占比大于20%且小于30%,并且至少两个前置比特位为0的数据的占比低于80%,则采用第二压缩类型进行压缩。
可选地,数据存储设备中第二数据项的压缩类型还包括第四压缩类型,当原始数据不满足上述数据特征时,数据存储设备采用位压缩(BitPacking)的方式压缩原始数据。
步骤708,从原始数据中查询满足查询条件的数据。
在一种可能的实施方式中,服务器根据查询条件从解压缩得到的原始数据中进行筛选,得到满足查询条件的数据。
本申请实施例中,数据存储设备通过对第二数据项进行划分,并根据原始数据的数据特征确定对应的压缩方式,提高了第二数据项的数据压缩效率;并且数据存储设备中存储有记录编码块元信息的元数据,使得服务器在查询第二数据项时根据查询条件和元数据确定对应的目标编码数据块,只需解压目标编码数据块即可得到原始数据,不必解压完整的第二列存,降低了服务器的数据处理压力,提高了数据查询效率。
示意性的,请参考图11至图18,其示出了本申请实施例中数据查询方法与相关技术数据查询方法的查询性能对比结果。如图11所示,新存储(即本申请实施例中的数据存储结构)的查询耗时远小于原存储(即相关技术中的数据存储结构)的查询耗时,并且在数据量增加的情况下,新存储的查询耗时增长较小,而原存储的查询耗时明显增加且增加不稳定。因此在同样的数据存储设备中,本申请实施例所使用的数据存储结构能够支撑更大的数据规模。
如图12所示,其示出了采用两种数据存储结构的数据存储设备在查询数据时的中央处理器(Central Processing Unit,CPU)使用率。其中,23:03至23:11为新存储的数据查询执行时间,CPU使用率最高为11%;23:11至23:38为原存储的数据查询执行时间,CPU使用率最高为66%。如图13所示,其示出了采用两种数据存储结构的数据存储设备在查询数据时的网络I/O量。其中,23:03至23:11为新存储的数据查询执行时间,网络I/O量为30M;23:11至23:38为原存储的数据查询执行时间,入流量为736M,出流量为2.9G。由此可见,相比于原存储,新存储的CPU使用率和网络I/O量得到大幅度降低。
如图14和图15所示,其分别示出了新存储和原存储中查询第一数据项时的内存分配情况。新存储在7分钟内完成了100次查询,且内存分配稳定在10G左右;而原存储在4分钟内执行1次查询,且未完成,内存分配高达22G,并且存在较长的垃圾回收停顿时间,在等待一段时间后才能继续下一轮的迭代计算。
如图16所示,其示出了本申请实施例中第二数据项的数据压缩率测试结果,与原始数据相比,压缩后的第二数据项的数据大小最低减小了30%,最高减小了65%。如图17和图18所示,其示出了本申请实施例中第二数据项的数据查询缓存占比以及首次查询耗时,可以看出,相比于第四压缩类型,第一压缩类型和第二压缩类型的数据,随着服务器读取数据量的增加,其缓存占比增长幅度较小,且查询耗时增加幅度小。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
请参考图19,其示出了本申请一个实施例提供的数据查询装置的结构框图。该装置可以包括:接收模块1901、第一确定模块1902、第二确定模块1903、第三确定模块1904、第四确定模块1905。
接收模块1901,用于接收数据查询请求,所述数据查询请求中包含查询条件,所述查询条件为目标列值或目标行号;
第一确定模块1902,用于响应于所述数据查询请求用于查询所述第一数据项,基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块;
第二确定模块1903,用于从所述目标一级数据块中确定满足所述查询条件的目标二级数据块;
第三确定模块1904,用于从所述目标二级数据块中确定满足所述查询条件的目标列存单元;
第四确定模块1905,用于从所述目标列存单元中确定目标查询内容,所述目标查询内容为所述目标列值所属的行号,或,属于所述目标行号的列值。
可选的,所述第一确定模块1902,还用于:
响应于所述查询条件为所述目标列值,基于所述列值索引确定满足所述查询条件的所述目标一级数据块;
响应于所述查询条件为所述目标行号,基于所述偏移索引确定满足所述查询条件的所述目标一级数据块。
可选的,所述第一确定模块1902,还用于:
根据所述列值索引中所述一级数据块起始列值和所述目标列值,确定所述目标一级数据块,其中,所述目标一级数据块的一级数据块起始列值小于等于所述目标列值,且所述目标一级数据块对应下一个一级数据块的一级数据块起始列值大于等于所述目标列值;
所述第二确定模块1903,还用于:
从所述二级数据块信息中获取所述目标一级数据块下各个二级数据块的第二起始列值索引;
根据所述第二起始列值索引对应的列值,通过二分法确定所述目标二级数据块,其中,所述目标二级数据块的二级数据块起始列值小于等于所述目标列值,且所述目标二级数据块对应下一个二级数据块的二级数据块起始列值大于等于所述目标列值;
所述第三确定模块1904,还用于:
根据所述目标二级数据块中各个列存单元对应的列值,通过二分法确定所述目标列存单元,所述目标列存单元对应的列值为所述目标列值;
所述第四确定模块1905,还用于:
获取所述目标列存单元中列值对应的第一起始行号,以及所述目标列存单元后下一列存单元中列值对应的第二起始行号;
根据所述第一起始行号和所述第二起始行号,确定所述目标列值所属的行号。
可选的,所述第一确定模块1902,还用于:
根据所述偏移索引中的所述一级数据块起始行号和所述目标行号,确定所述目标一级数据块,其中,所述目标行号属于所述目标一级数据块的行号范围;
所述第二确定模块1903,还用于:
从所述二级数据块信息中获取所述目标一级数据块下各个二级数据块的二级数据块起始行号;
根据所述二级数据块起始行号,确定所述目标二级数据块,其中,所述目标行号属于所述目标二级数据块的行号范围;
所述第三确定模块1904,还用于:
根据所述目标二级数据块中各个列存单元对应列值的起始行号,确定所述目标列存单元,所述目标行号属于所述目标列存单元的行号范围;
所述第四确定模块1905,还用于:
从所述目标列存单元中提取所述目标行号对应的列值。
可选的,所述装置还包括:
缓存模块,用于响应于所述数据查询请求用于查询第二数据项,缓存所述第二数据项对应的第二列存;
解压模块,用于根据所述第二列存中的元数据对编码数据进行解压,得到原始数据;
查询模块,用于从所述原始数据中查询满足所述查询条件的数据。
可选的,所述解压模块,还用于:
根据所述目标行号以及所述编码数据中编码数据块的数据块大小,从所述编码数据中确定目标编码数据块,以及所述元数据中所述目标编码数据块对应的目标元数据块,所述数据块大小为所述编码数据块对应原始数据的行数;
根据所述目标元数据块中的编码块偏移和压缩尺寸,从所述编码数据中提取所述目标编码数据块;
根据所述目标元数据块中的压缩类型,对所述目标编码数据块进行解压,得到所述原始数据。
可选的,所述压缩类型包括第一压缩类型和第二压缩类型,所述第一压缩类型的压缩率高于所述第二压缩类型的压缩率;
其中,若所述原始数据中目标原始数据的占比达到第一阈值,或,所述原始数据中基数的占比小于第二阈值,所述原始数据采用所述第一压缩类型进行压缩,所述目标原始数据是至少两个前置比特位为0的数据;
若所述原始数据中基数的占比大于所述第二阈值,且小于第三阈值,所述原始数据采用所述第二压缩类型进行压缩。
请参考图20,其示出了本申请一个实施例提供的服务器的结构示意图。具体来讲:
所述服务器2000包括CPU2001、包括随机存取存储器(Random Access Memory,RAM)2002和只读存储器(Read Only Memory,ROM)2003的系统存储器2004,以及连接系统存储器2004和中央处理单元2001的系统总线2005。所述服务器2000还包括帮助计算机内的各个器件之间传输信息的基本I/O系统2006,和用于存储操作系统2013、应用程序2014和其他程序模块2012的大容量存储设备2007。
所述基本输入/输出系统2006包括有用于显示信息的显示器2008和用于用户输入信息的诸如鼠标、键盘之类的输入设备2009。其中所述显示器2008和输入设备2009都通过连接到系统总线2005的输入输出控制器2010连接到中央处理单元2001。所述基本输入/输出系统2006还可以包括输入输出控制器2010以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器2010还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备2007通过连接到系统总线2005的大容量存储控制器(未示出)连接到中央处理单元2001。所述大容量存储设备2007及其相关联的计算机可读介质为服务器2000提供非易失性存储。也就是说,所述大容量存储设备2007可以包括诸如硬盘或者只读光盘(Compact Disc Read-Only Memory,CD-ROM)驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存或其他固态存储其技术,CD-ROM、数字视频光盘(Digital Video Disc,DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器2004和大容量存储设备2007可以统称为存储器。
根据本申请的各种实施例,所述服务器2000还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器2000可以通过连接在所述系统总线2005上的网络接口单元2011连接到网络2012,或者说,也可以使用网络接口单元2011来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集存储于存储器中,且经配置以由一个或者一个以上处理器执行,以实现上述数据查询方法。
可选的,上述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上各个实施例所述的数据查询方法。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。服务器的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该服务器执行上述方面的各种可选实现方式中提供的数据查询方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读存储介质中或者作为计算机可读存储介质上的一个或多个指令或代码进行传输。计算机可读存储介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种数据存储设备,其特征在于,所述数据存储设备存储有数据表中第一数据项对应的第一列存,所述数据表中的行数据按照所述第一数据项的值排序:
所述第一列存的列存结构中包括:列存单元、一级数据块信息、二级数据块信息、偏移索引和列值索引;
所述列存单元中包含列值以及列值对应的起始行号;
所述一级数据块信息中包含一级数据块标识、一级数据块起始行号以及第一起始列值索引之间的对应关系,所述第一起始列值索引为一级数据块对应起始列值在所述列存单元中的索引,所述一级数据块由至少一个二级数据块构成;
所述二级数据块信息中包含二级数据块标识、所属一级数据块的一级数据块标识、二级数据块起始行号以及第二起始列值索引之间的对应关系,所述第二起始列值索引为二级数据块对应起始列值在所述列存单元中的索引,所述二级数据块由至少一个所述列存单元构成;
所述偏移索引中包含所述一级数据块标识与所述一级数据块起始行号之间的对应关系;
所述列值索引中包含所述一级数据块标识与一级数据块起始列值之间的对应关系。
2.根据权利要求1所述的数据存储设备,其特征在于,所述数据存储设备还存储有所述数据表中第二数据项对应的第二列存;
所述第二列存的列存结构中包括:元数据和编码数据,所述元数据由至少一个元数据块构成,所述编码数据由至少一个编码数据块构成,且所述元数据块与所述编码数据块一一对应;
所述元数据块中包含对应编码数据块的编码块元信息,所述编码块元信息包括编码块偏移、压缩尺寸以及压缩类型;
所述编码数据块中的编码数据根据所述压缩类型对原始数据压缩得到。
3.根据权利要求2所述的数据存储设备,其特征在于,所述第一数据项为所述数据表中的主键数据项,所述第二数据项为所述数据表中除所述主键数据项以外的数据项。
4.一种数据查询方法,其特征在于,用于从如权利要求1至3任一所述的数据存储设备中查询数据,所述方法包括:
接收数据查询请求,所述数据查询请求中包含查询条件,所述查询条件为目标列值或目标行号;
响应于所述数据查询请求用于查询所述第一数据项,基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块;
从所述目标一级数据块中确定满足所述查询条件的目标二级数据块;
从所述目标二级数据块中确定满足所述查询条件的目标列存单元;
从所述目标列存单元中确定目标查询内容,所述目标查询内容为所述目标列值所属的行号,或,属于所述目标行号的列值。
5.根据权利要求4所述的方法,其特征在于,所述基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块,包括:
响应于所述查询条件为所述目标列值,基于所述列值索引确定满足所述查询条件的所述目标一级数据块;
响应于所述查询条件为所述目标行号,基于所述偏移索引确定满足所述查询条件的所述目标一级数据块。
6.根据权利要求5所述的方法,其特征在于,所述基于所述列值索引确定满足所述查询条件的所述目标一级数据块,包括:
根据所述列值索引中所述一级数据块起始列值和所述目标列值,确定所述目标一级数据块,其中,所述目标一级数据块的一级数据块起始列值小于等于所述目标列值,且所述目标一级数据块对应下一个一级数据块的一级数据块起始列值大于等于所述目标列值;
所述从所述目标一级数据块中确定满足所述查询条件的目标二级数据块,包括:
从所述二级数据块信息中获取所述目标一级数据块下各个二级数据块的第二起始列值索引;
根据所述第二起始列值索引对应的列值,通过二分法确定所述目标二级数据块,其中,所述目标二级数据块的二级数据块起始列值小于等于所述目标列值,且所述目标二级数据块对应下一个二级数据块的二级数据块起始列值大于等于所述目标列值;
所述从所述目标二级数据块中确定满足所述查询条件的目标列存单元,包括:
根据所述目标二级数据块中各个列存单元对应的列值,通过二分法确定所述目标列存单元,所述目标列存单元对应的列值为所述目标列值;
所述从所述目标列存单元中确定目标查询内容,包括:
获取所述目标列存单元中列值对应的第一起始行号,以及所述目标列存单元后下一列存单元中列值对应的第二起始行号;
根据所述第一起始行号和所述第二起始行号,确定所述目标列值所属的行号。
7.根据权利要求5所述的方法,其特征在于,所述基于所述偏移索引确定满足所述查询条件的所述目标一级数据块,包括:
根据所述偏移索引中的所述一级数据块起始行号和所述目标行号,确定所述目标一级数据块,其中,所述目标行号属于所述目标一级数据块的行号范围;
所述从所述目标一级数据块中确定满足所述查询条件的目标二级数据块,包括:
从所述二级数据块信息中获取所述目标一级数据块下各个二级数据块的二级数据块起始行号;
根据所述二级数据块起始行号,确定所述目标二级数据块,其中,所述目标行号属于所述目标二级数据块的行号范围;
所述从所述目标二级数据块中确定满足所述查询条件的目标列存单元,包括:
根据所述目标二级数据块中各个列存单元对应列值的起始行号,确定所述目标列存单元,所述目标行号属于所述目标列存单元的行号范围;
所述从所述目标列存单元中确定目标查询内容,包括:
从所述目标列存单元中提取所述目标行号对应的列值。
8.根据权利要求4所述的方法,其特征在于,所述接收数据查询请求之后,所述方法还包括:
响应于所述数据查询请求用于查询第二数据项,缓存所述第二数据项对应的第二列存;
根据所述第二列存中的元数据对编码数据进行解压,得到原始数据;
从所述原始数据中查询满足所述查询条件的数据。
9.根据权利要求8所述的方法,其特征在于,所述查询条件为所述目标行号,所述根据所述第二列存中的元数据对编码数据进行解压,得到原始数据,包括:
根据所述目标行号以及所述编码数据中编码数据块的数据块大小,从所述编码数据中确定目标编码数据块,以及所述元数据中所述目标编码数据块对应的目标元数据块,所述数据块大小为所述编码数据块对应原始数据的行数;
根据所述目标元数据块中的编码块偏移和压缩尺寸,从所述编码数据中提取所述目标编码数据块;
根据所述目标元数据块中的压缩类型,对所述目标编码数据块进行解压,得到所述原始数据。
10.根据权利要求9所述的方法,其特征在于,所述压缩类型包括第一压缩类型和第二压缩类型,所述第一压缩类型的压缩率高于所述第二压缩类型的压缩率;
其中,若所述原始数据中目标原始数据的占比达到第一阈值,或,所述原始数据中基数的占比小于第二阈值,所述原始数据采用所述第一压缩类型进行压缩,所述目标原始数据是至少两个前置比特位为0的数据;
若所述原始数据中基数的占比大于所述第二阈值,且小于第三阈值,所述原始数据采用所述第二压缩类型进行压缩。
11.一种数据查询装置,其特征在于,用于从如权利要求1至3任一所述数据存储设备中查询数据,所述装置包括:
接收模块,用于接收数据查询请求,所述数据查询请求中包含查询条件,所述查询条件为目标列值或目标行号;
第一确定模块,用于响应于所述数据查询请求用于查询所述第一数据项,基于所述偏移索引或所述列值索引,确定满足所述查询条件的目标一级数据块;
第二确定模块,用于从所述目标一级数据块中确定满足所述查询条件的目标二级数据块;
第三确定模块,用于从所述目标二级数据块中确定满足所述查询条件的目标列存单元;
第四确定模块,用于从所述目标列存单元中确定目标查询内容,所述目标查询内容为所述目标列值所属的行号,或,属于所述目标行号的列值。
12.一种服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求4至10任一所述的数据查询方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求4至10任一所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010635548.9A CN111611250A (zh) | 2020-07-03 | 2020-07-03 | 数据存储设备、数据查询方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010635548.9A CN111611250A (zh) | 2020-07-03 | 2020-07-03 | 数据存储设备、数据查询方法、装置、服务器及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111611250A true CN111611250A (zh) | 2020-09-01 |
Family
ID=72197272
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010635548.9A Pending CN111611250A (zh) | 2020-07-03 | 2020-07-03 | 数据存储设备、数据查询方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111611250A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112684986A (zh) * | 2021-01-05 | 2021-04-20 | 中交智运有限公司 | 一种海量数据处理方法 |
CN113177045A (zh) * | 2021-04-12 | 2021-07-27 | 锐掣(杭州)科技有限公司 | 数据提取方法、装置、可计算存储设备及数据请求设备 |
CN115809248A (zh) * | 2022-12-30 | 2023-03-17 | 联通智网科技股份有限公司 | 数据查询方法和装置以及存储介质 |
CN116340367A (zh) * | 2023-05-30 | 2023-06-27 | 杭州芯翼科技有限公司 | 数据查询方法、装置、设备和存储介质 |
-
2020
- 2020-07-03 CN CN202010635548.9A patent/CN111611250A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112684986A (zh) * | 2021-01-05 | 2021-04-20 | 中交智运有限公司 | 一种海量数据处理方法 |
CN112684986B (zh) * | 2021-01-05 | 2023-01-24 | 中交智运有限公司 | 一种海量数据处理方法 |
CN113177045A (zh) * | 2021-04-12 | 2021-07-27 | 锐掣(杭州)科技有限公司 | 数据提取方法、装置、可计算存储设备及数据请求设备 |
CN115809248A (zh) * | 2022-12-30 | 2023-03-17 | 联通智网科技股份有限公司 | 数据查询方法和装置以及存储介质 |
CN115809248B (zh) * | 2022-12-30 | 2024-03-22 | 联通智网科技股份有限公司 | 数据查询方法和装置以及存储介质 |
CN116340367A (zh) * | 2023-05-30 | 2023-06-27 | 杭州芯翼科技有限公司 | 数据查询方法、装置、设备和存储介质 |
CN116340367B (zh) * | 2023-05-30 | 2023-08-08 | 杭州芯翼科技有限公司 | 数据查询方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111611250A (zh) | 数据存储设备、数据查询方法、装置、服务器及存储介质 | |
EP3812915B1 (en) | Big data statistics at data-block level | |
US9298774B2 (en) | Changing the compression level of query plans | |
US20200117649A1 (en) | Data set compression within a database system | |
US10769126B1 (en) | Data entropy reduction across stream shard | |
CN107577436B (zh) | 一种数据存储方法及装置 | |
KR101663547B1 (ko) | 데이터베이스의 아카이빙 방법 및 장치, 아카이빙된 데이터베이스의 검색 방법 및 장치 | |
KR20150042293A (ko) | 개별 액세스 가능한 데이터 유닛의 스토리지 관리 | |
KR101656750B1 (ko) | 인덱스정보를 생성하는 데이터베이스의 아카이빙 방법 및 장치, 인덱스정보를 포함하는 아카이빙된 데이터베이스의 검색 방법 및 장치 | |
CN107463606B (zh) | 一种用于大数据存储系统的数据压缩引擎及方法 | |
US9104726B2 (en) | Columnar databases | |
CN110727406A (zh) | 一种数据存储调度方法及装置 | |
CN111817722A (zh) | 数据压缩方法、装置及计算机设备 | |
US20240126762A1 (en) | Creating compressed data slabs that each include compressed data and compression information for storage in a database system | |
CN115483935A (zh) | 一种数据处理方法及装置 | |
CN111857574A (zh) | 一种写请求数据压缩方法、系统、终端及存储介质 | |
CN112711564B (zh) | 合并处理方法以及相关设备 | |
CN115905168B (zh) | 基于数据库的自适应压缩方法和装置、设备、存储介质 | |
CN116760661A (zh) | 数据存储方法、装置、计算机设备、存储介质和程序产品 | |
CN115168319A (zh) | 一种数据库系统、数据处理方法及电子设备 | |
US20130173564A1 (en) | System and method for data compression using multiple encoding tables | |
CN116820323A (zh) | 数据存储方法、装置、电子设备及计算机可读存储介质 | |
CN108241640B (zh) | 一种分布式的文件存储方法 | |
US20240168929A1 (en) | Optimizing storage of data in row-oriented data storages | |
US20240086392A1 (en) | Consistency checks for compressed data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40028555 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |