CN115145954A - 一种数据查询方法、数据存储方法及装置 - Google Patents
一种数据查询方法、数据存储方法及装置 Download PDFInfo
- Publication number
- CN115145954A CN115145954A CN202211063011.5A CN202211063011A CN115145954A CN 115145954 A CN115145954 A CN 115145954A CN 202211063011 A CN202211063011 A CN 202211063011A CN 115145954 A CN115145954 A CN 115145954A
- Authority
- CN
- China
- Prior art keywords
- index
- key
- data
- file
- value pair
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- 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
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (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
技术领域
本说明书一个或多个实施例涉及数据处理技术领域,尤其涉及一种数据查询方法、数据存储方法及装置。
背景技术
随着技术的发展,各种数据的数据量正在呈现爆炸式增长。数据库用来提供存储数据和查询数据等服务。数据库所存储的数据也常常包含很多隐私数据,人们希望在不泄露隐私数据的情况下,提高数据库的性能。随着业务性数据的持续性增长,为了查询业务性的数据而建立的索引数据也会随之增加,数据库的查询引擎面临着单机扩展性与提高性能的问题。日志结构合并树(Log Structured Merge Tree,LSM树)是一种采用多数据层结构以文件形式存储数据,能够提供有序数据存储、索引与查询等服务的数据结构。LSM树能够较高效的数据写入,但是随着数据库数据量的增加,其查询效率有待提高。
因此,希望能有改进的方案,在进行数据查询时,减少对内存的空间占用,提高查询效率。
发明内容
本说明书一个或多个实施例描述了一种数据查询方法、数据存储方法及装置,以在进行数据查询时,减少对内存的空间占用,提高查询性能。具体的技术方案如下。
第一方面,实施例提供了一种数据查询方法,其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述方法包括:
确定待查询键值对数据的键,作为第一键;
基于所述第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;
基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块;
基于所述匹配路径上的最后一层索引块指向的键值对数据,从所述第一文件中读取待查询键值对数据。
在一种实施方式中,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
在一种实施方式中,所述基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块的步骤,包括:
当所述待查询键值对数据属于所述业务数据时,基于所述第一键,从所述第一文件的第一树形索引中确定匹配路径上的索引块;
当所述待查询键值对数据属于所述元数据时,基于所述第一键,从所述第一文件的第二树形索引中确定匹配路径上的索引块。
在一种实施方式中,键值对数据以文件中的数据块形式存储;所述第一树形索引的最后一层索引块指向业务数据块,所述业务数据块中包含若干个业务数据;
所述从所述第一文件中读取待查询键值对数据的步骤,包括:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的业务数据块中确定第一数据块;
从所述第一文件中读取所述第一数据块,从所述第一数据块中获取待查询键值对数据。
在一种实施方式中,键值对数据以文件中的数据块形式存储;所述第二树形索引的最后一层索引块指向元数据块,所述元数据块中包含若干个所述元数据;
所述从所述第一文件中读取待查询键值对数据的步骤,包括:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的元数据块中确定第二数据块;
从所述第一文件中读取所述第二数据块,从所述第二数据块中获取待查询键值对数据。
在一种实施方式中,在从所述第一文件的树形索引中确定匹配路径上的索引块之后,所述方法还包括:
将所述匹配路径上的索引块缓存在内存中。
在一种实施方式中,所述将所述匹配路径上的索引块缓存在内存中的步骤,包括:
基于第一停留时长,将所述第一树形索引对应的匹配路径上的索引块缓存在内存中;
基于第二停留时长,将所述第二树形索引对应的匹配路径上的索引块缓存在内存中;
其中,所述第一停留时长大于所述第二停留时长。
在一种实施方式中,所述基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块的步骤,包括:
基于所述第一键与所述树形索引中各层索引块中键的逐级匹配,从所述树形索引中确定匹配路径上的索引块。
在一种实施方式中,所述从所述树形索引中确定匹配路径上的索引块的步骤,包括:
从所述树形索引中读取根索引块,作为当前索引块;
将所述第一键与所述当前索引块中的若干个键进行匹配,将匹配成功的键对应的下一层索引块作为匹配路径上的索引块;
当所述下一层索引块不是最后一层索引块时,将所述下一层索引块作为当前索引块,返回执行所述将所述第一键与所述当前索引块中的若干个键进行匹配的步骤;
当所述下一层索引块是最后一层索引块时,确定匹配路径上的所有索引块。
在一种实施方式中,所述方法还包括:
当多个数据层的文件进行合并之后,如果所述最后一层索引块指向的键值对数据未进行更新,则复用所述匹配路径上的索引块,以建立合并后的树形索引。
第二方面,实施例提供了一种数据存储方法,通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述方法包括:
确定待存储键值对数据,将所述待存储键值对数据的键作为第一键;
基于所述第一键,将所述待存储键值对数据存储在对应的第一文件中;
当所述第一文件中尚未存在树形索引时,基于所述第一文件中已存储的键值对数据生成树形索引;所述树形索引指向已存储的键值对数据,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;
当第一文件中已经存在树形索引时,基于所述待存储键值对数据更新所述树形索引。
在一种实施方式中,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
第三方面,实施例提供了一种数据查询装置,其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述装置包括:
第一确定模块,配置为确定待查询键值对数据的键,作为第一键;
第一匹配模块,配置为基于所述第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;
第一路径模块,配置为基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块;
第一读取模块,配置为基于所述匹配路径上的最后一层索引块指向的键值对数据,从所述第一文件中读取待查询键值对数据。
第四方面,实施例提供了一种数据存储装置,通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述装置包括:
第二确定模块,配置为确定待存储键值对数据,将所述待存储键值对数据的键作为第一键;
第一存储模块,配置为基于所述第一键,将所述待存储键值对数据存储在对应的第一文件中;
第一生成模块,配置为当所述第一文件中尚未存在树形索引时,基于所述第一文件中已存储的键值对数据生成树形索引;所述树形索引指向已存储的键值对数据,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;
第一更新模块,配置为当所述第一文件中已经存在树形索引时,基于所述待存储键值对数据更新所述树形索引。
第五方面,实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面和第二方面中任一项所述的方法。
第六方面,实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面和第二方面中任一项所述的方法。
本说明书实施例提供的方法及装置中,对于通过多数据层结构以文件的形式存储键值对数据的数据库,在文件中建立指向键值对数据的树形索引,在查询数据时,基于待查询键值对数据的第一键,从文件中的树形索引中确定匹配路径上的索引块,基于匹配路径上的最后一层索引块读取待查询键值对数据,只需要将匹配路径上的索引块读取到内存中,无需将所有索引数据读取到内存中,因此能够减少对内存的空间占用,提高查询性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书披露的一个实施例的实施场景示意图;
图2为实施例提供的一种数据查询方法的流程示意图;
图3为文件中树形索引内部的一种结构示意图;
图4为实施例提供的一种数据存储方法的流程示意图;
图5为实施例提供的一种数据查询装置的示意性框图;
图6为实施例提供的一种数据存储装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
图1为本说明书披露的一个实施例的实施场景示意图。其中,键值对数据在存储时,首先写入内存的MemTable文件中,当内存中存储的数据满足一定条件时,可以将数据转存到磁盘中的SSTable文件中。随着数据的不断写入,在MemTable和SSTable文件中都可能存在数据,并且磁盘中存储的数据量会越来越多。磁盘中的数据可以通过多数据层结构存储数据,并且将数据存储在每个数据层的SSTable文件中,每个数据层的文件数量可以是一个或多个。图1中示意出了磁盘的三个数据层L0、L1和L2层,每个数据层中包含一个或多个SSTable文件。文件中存储的数据可以包括业务数据和业务数据的元数据。在任意一个SSTable文件中建立有指向业务数据的树形索引,以及指向元数据的树形索引。在查询数据时,从SSTable文件中读取树形索引,基于树形索引查询业务数据或元数据。图1显示的内存和磁盘的存储结构中的数据层数量和文件数量仅是一种举例,并不是对本申请的限定。
图1所示的这种通过多数据层以文件的形式存储数据的数据库结构,能够提供比较高效的写数据性能以及有序数据存储、查询等服务。日志结构合并树(Log StructuredMerge Tree,LSM树)就是采用这种数据结构的一种存储架构。LSM树是一种分层、有序、面向磁盘的数据结构,能够通过增量写日志与多级日志数据合并实现数据存储与索引。LSM树仅是采用多数据层结构以数据文件形式存储关系网络数据的一种实现,在实际应用中还有其他的实现方式,本说明书不再列举。
文件中存储的数据包括业务数据和业务数据的元数据,并且可以以键值对数据的形式存储在多个数据块中。多个文件按照数据的键范围进行了水平分区,不同文件可以存储一定键范围内的数据。业务数据是用户需要查询的数据,是对访问时延比较敏感的数据,同时也是查询频率较高的数据。业务数据可以是与对象相关的数据(即对象数据),对象可以包括用户、商品、交易或事件等。
元数据(Meta data)是用于描述数据的数据,通常用来实现数据的管理。业务数据的元数据可以是指与后台任务相关的元数据,也是对访问时延相对不敏感的操作依赖的元数据,例如在数据库引擎进行数据合并、巡检、容灾和备份等操作时需要的元数据,这些元数据与业务数据之间存在一定的关联性,并且与业务数据的键存在对应关系。具体的,一个业务数据对应一个元数据,或者多个业务数据对应一个元数据。例如,元数据可以是数据块的校验核,利用校验核可以验证数据块的合法性;在分布式数据库场景下,不同副本之间需要利用校验核保证副本之间的合法性;在LSM树中,在对多版本的同一数据表中的数据进行合并时,也需要元数据来提示哪些数据或数据块是直接使用的,哪些数据或数据块是需要进行相应的合并、替换等操作的。
数据库引擎在查询数据时需要将数据索引读取到内存中,因此索引的建立是影响数据库性能的关键因素。而索引数据通常持久化在磁盘中,并且会随着业务数据的增加而增长。在一种实施方式中,可以将索引数据全部存储在内存中,以实现更低的访问时延和更灵活的使用方式。但是这种方式需要占用的内存空间会随着数据量的增加而增大。
为了减少索引数据对内存的占用,提高查询性能,本说明书实施例提供了一种数据查询方法,对应的,也提供了一种数据存储方法。这就是说,本说明书实施例对数据库中数据的处理过程包含数据存储阶段和数据查询阶段。为了能更直接地体现数据查询过程的性能提升,在下文的描述中会先对数据查询阶段进行说明,再对数据存储阶段进行说明。
在数据查询方法中包括以下步骤:步骤S210,确定待查询键值对数据的键,作为第一键;步骤S220,基于第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;步骤S230,基于第一键,从第一文件的树形索引中确定匹配路径上的索引块;步骤S240,基于匹配路径上的最后一层索引块指向的键值对数据,从第一文件中读取待查询键值对数据。本实施例只需将匹配路径上的索引块读取到内存中,无需将文件中的所有索引数据读取到内存中,因此能够减少对内存的空间占用,提高查询性能。
下面结合图2对本实施例进行详细说明。
图2为实施例提供的一种数据查询方法的流程示意图。其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,每一个数据层可以包括一个或多个文件。任意一个文件中包含指向键值对数据的树形索引,该树形索引是指向该文件中存储的键值对数据的索引。每一个文件中都建立有指向该文件中所存储数据的树形索引。树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块。若干个是指一个或多个。非易失性存储器例如可以是磁盘、硬盘或闪存等。
图3为文件中树形索引内部的一种结构示意图。其中示意出了两层索引块和最后一层索引块指向的数据块。方框中的数字代表键,索引块用于存储键和该键指向的下一层索引块的存储地址,键与该存储地址可以按照键值对(KV)的形式存储。例如根索引块中的Key=20指向索引块1,Key=40指向索引块2。键与该键指向的下一层索引块包含的键范围之间存在对应关系,因此两者之间具有指向关系。也就是说,索引块中的键与下一层索引块的键范围之间存在对应关系。最后一层索引块用于存储键和该键指向的数据块的存储地址,最后一层索引块中的键指向包含键值对数据的数据块,例如索引块1中的Key=5指向数据块1。数据块用于存储若干个键和对应的值,也就是键值对数据。数据块中的键值对数据可以按照键单调递增或递减排列。
文件中存储的键值对数据可以属于业务数据,也可以属于业务数据的元数据。业务数据与元数据具有不同的访问时延敏感性,因此在本实施例中可以针对不同的数据分别建立树形索引,也就是树形索引可以包括针对业务数据的第一树形索引和针对元数据的第二树形索引。每个文件可以分别包含这两种树形索引,两种树形索引分别独立存储。
该方法可以通过计算设备中的数据库引擎执行,计算设备可以通过任何具有计算、处理能力的装置、设备、平台、设备集群等来实现。该方法包括以下步骤。
在步骤S210中,确定待查询键值对数据的键,作为第一键。待查询键值对数据可以是一个数据,即点查,也叫KV查询;也可以是多个数据,即扫描查询。因此,第一键可以是一个或多个。在本步骤中,可以基于用户的查询请求确定待查询键值对数据的键,用户的查询请求中可以携带待查询键值对数据的键。这种查询可以是针对业务数据的查询。待查询键值对数据的键也可以根据数据库引擎的后台执行逻辑确定,这种查询是针对业务数据的元数据的查询。
在步骤S220中,基于第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件。
数据层可以存储一个或多个文件,每个文件可以存储一定键范围内的键值对数据。一般来说,文件中存储的键值对数据可以按照键单调递增或递减有序排列。文件对应的键范围可以是预先设定的,也可以是变动的,例如在存储数据之后再更新文件对应的键范围。文件与键范围的对应关系可以记录在数据层或者内存中。
将第一键与文件的键范围进行匹配,第一键命中的键范围对应的文件即是第一文件,该第一文件是存储待查询键值对数据的文件。
在步骤S230中,基于第一键,从第一文件的树形索引中确定匹配路径上的索引块。
当待查询键值对数据属于业务数据时,可以基于第一键从第一树形索引中确定匹配路径上的索引块。当待查询键值对数据属于业务数据的元数据时,可以基于第一键从第二树形索引中确定匹配路径上的索引块。
不管从第一树形索引还是第二树形索引中确定匹配路径,本步骤在执行时,都可以基于第一键与树形索引中各层索引块中键的逐级匹配,从树形索引中确定匹配路径上的索引块。具体实施时可以按照以下步骤1~4所示的循环进行逐级匹配。
步骤1,从树形索引中读取根索引块,作为当前索引块。根索引块地址可以存储在文件元数据中。根索引块的地址包括第一树形索引的根索引块地址和第二树形索引的根索引块地址。在从文件元数据中读取根索引块地址时,如果待查询键值对数据属于业务数据,则读取第一树形索引的根索引块地址;如果待查询键值对数据属于业务数据的元数据,则读取第二树形索引的根索引块地址。
步骤2,将第一键与当前索引块中的若干个键进行匹配,将匹配成功的键对应的下一层索引块作为匹配路径上的索引块,并可以记录该匹配路径上的索引块。索引块中的键一般表示键范围,可以将第一键与当前索引块的多个键范围进行匹配。
步骤3,当下一层索引块不是最后一层索引块时,将下一层索引块作为当前索引块,返回执行上述步骤2。
步骤4,当下一层索引块是最后一层索引块时,确定匹配路径上的所有索引块。当匹配到最后一层索引块时,可以获取记录的匹配路径上的所有索引块。例如,在图3中,匹配路径可以是“根索引块→索引块1→数据块2”。
以上仅是基于第一键与树形索引中各层索引块中键进行逐级匹配的一种实施方式,在实施时还可以采用其他的方式从树形索引中确定匹配路径上的索引块,此处不再一一列举。
在从第一文件的树形索引中确定匹配路径上的索引块之后,还可以将匹配路径上的索引块缓存在内存中。当待查询键值对数据属于热查询数据时,将匹配路径上的索引块缓存在内存中,也就是缓存热查询数据的索引数据,这样能够在针对热查询数据的更多次查询中快速地进行查询,减少时延。
在一种实施方式中,也可以基于多次历史查询记录,确定热查询数据,并缓存热查询数据对应的匹配路径上的索引块。
对于业务数据和业务数据的元数据,这两种数据具有不同的查询频次,因此可以对两种数据对应的索引数据缓存不同的时长。
例如,可以基于第一停留时长t1,将第一树形索引对应的匹配路径上的索引块缓存在内存中;基于第二停留时长t2,将第二树形索引对应的匹配路径上的索引块缓存在内存中。其中,第一停留时长t1大于第二停留时长t2。第一停留时长t1和第二停留时长t2可以是预先设定的,也可以是基于历史的访问频率确定的。其中,哪种数据的访问频率更大,其停留时长就对应地更长。
本实施例可以针对业务数据和业务数据的元数据分别构建树形索引,从而使得将不同冷热程度的数据进行分离变得能够实施,对不同热度的数据区别处理,能够更好地降低敏感数据的查询时延。
在步骤S240中,基于匹配路径上的最后一层索引块指向的键值对数据,从第一文件中读取待查询键值对数据。其中,当文件中的数据量较大时,键值对数据可以以数据块形式存储。最后一层索引块指向数据块,其中包括业务数据块和元数据块。
当待查询键值对数据属于业务数据时,最后一层索引块指向业务数据块。本步骤在执行时,可以利用第一键与最后一层索引块中键的匹配结果,从最后一层索引块指向的业务数据块中确定第一数据块,从第一文件中读取第一数据块,从第一数据块中获取待查询键值对数据。具体可以将第一键与第一数据块中的键进行匹配,根据匹配结果得到待查询键值对数据。
例如,第一键Key=9,最后一层索引块为索引块1,将Key=9与索引块1中的键进行匹配,匹配成功的是索引块1中的Key=10对应的数据块2(即第一数据块),在读取数据2的数据后,根据Key=9可以从数据块2中得到待查询键值对数据为Key=9的数据。
当待查询键值对数据属于业务数据的元数据时,最后一层索引块指向元数据块。本步骤在执行时,可以利用第一键与最后一层索引块中键的匹配结果,从最后一层索引块指向的元数据块中确定第二数据块,从第一文件中读取第二数据块,从第二数据块中获取待查询键值对数据。具体可以将第一键与第二数据块中的键进行匹配,根据匹配结果得到待查询键值对数据。
在本实施例涉及的数据库结构中,多个数据层存在上下层之分,上层的数据会在满足一定条件时向下层进行数据合并。当多个数据层的文件进行合并之后,如果上述最后一层索引块指向的键值对数据未进行更新,则在建立索引块之后可以复用匹配路径上的索引块,直接将匹配路径上的索引块添加至新建立的树形索引中,从而建立合并后的树形索引。
为了提高查询效率,上文提到的缓存机制能够将大部分热索引块缓存在内存中,从而提高热数据块查询效率。对于冷数据块,在查询的执行过程中,可以将索引块和数据块进行线性化的预取(即异步IO),尽量为执行线程提供稳定的IO(输入/输出)流水,以增强查询性能。
以上实施例对数据查询阶段进行了说明。下面将结合图4实施例对数据存储阶段进行说明。在数据查询阶段使用到的索引数据可以是在数据存储阶段建立的。图4实施例与图2实施例是基于同一发明构思得到的不同阶段的方法,相关的说明可以相互参照。
图4为实施例提供的一种数据存储方法的流程示意图。该方法通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块。该方法包括以下步骤。
在步骤S410中,确定待存储键值对数据。待存储键值对数据可以是一个或多个。在本步骤中,可以基于用户的存储请求确定待存储键值对数据的键,用户的存储请求中可以携带待存储键值对数据。这种存储可以是针对业务数据的存储。待存储键值对数据的键也可以根据数据库引擎的后台执行逻辑确定,这种存储是针对业务数据的元数据的存储。
在步骤S420中,基于第一键,将待存储键值对数据存储在对应的第一文件中。在存储待存储键值对数据时,可以基于第一键与文件对应的键范围的匹配结果,从多个文件中确定第一文件,从而将待存储键值对数据存储在第一文件中。第一文件也可以是采用其他方式确定的,例如随机选取的,或者按照顺序选择的。在这种方式中,当将待存储键值对数据存储在第一文件中时,如果第一键超出第一文件的已有键范围,可以基于第一键更新第一文件的已有键范围;如果未超出,则可以不予以处理。
在步骤S430中,当第一文件中尚未存在树形索引时,基于第一文件中已存储的键值对数据生成树形索引。在步骤S430之前、步骤S420之后,可以判断第一文件中是否存在树形索引,如果不存在,则执行步骤S430;如果存在,则执行步骤S440。
其中,树形索引指向已存储的键值对数据,已存储的键值对数据包括步骤S410中提及的待存储键值对数据,也包括更多其他已存储的键值对数据。树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块,可以按照图3所示的结构生成树形索引。
在生成树形索引时,可以基于按照键单调递增进行排列的多个数据块的键范围,生成索引块。树形索引的高度与键值对数据的数据量大小相关。树形索引的每一层对应存在其阈值,当索引块的数据量达到该阈值时,该索引树会升高一层,一直到所有数据写入完毕,就可以建立根索引块。例如,索引块的阈值是4个键,每个键指向1个数据块或索引块;这样,在图3中,可以基于数据块1~4生成索引块1,根据索引块1~2生成根索引块。
在步骤S440中,当第一文件中已经存在树形索引时,基于待存储键值对数据更新树形索引。在更新树形索引时,如果待存储键值对数据是所在数据块中的第一个数据,则说明该数据块尚未建立对应的索引,此时可以建立该数据块与索引块的指向关系;如果待存储键值对数据不是所在数据块中的第一个数据,则说明该数据块已经建立索引,此时可以仅更新该数据块对应的索引块中的键。
在步骤S430中,当键值对数据属于业务数据时,可以基于第一文件中已存储的键值对数据生成针对业务数据的第一树形索引。当键值对数据属于业务数据的元数据时,可以基于第一文件中已存储的键值对数据生成针对元数据的第二树形索引。
在本实施例中,在向磁盘中存储数据时,可以按照已存储键值对数据生成树形索引或者基于待存储键值对数据更新已有的树形索引,以方便在查询键值对数据时可以读取部分索引数据,减少数据对内存的占用,提高数据库查询性能。
在上述实施例提供的数据查询方法中,在文件中建立树形索引,使得数据库引擎在查询数据时,可以按需加载索引数据,无需加载文件中的所有索引数据,从而减少对内存的占用。并且,本实施例还可以将热度较高的索引数据缓存在内存中,提高查询效率。这种缓存方式使得对索引数据的缓存粒度很小,能够一定程度上解决数据库占用的内存随持久化数据量线性增加的问题,从而解决数据库单机数据量与分区数量的扩展问题,并提供了与内存数据库接近的数据访问时延与灵活性,增强了分布式数据库单机的小规格化能力和分区数据的扩展性。
本说明书中,第一键、第一文件、第一树形索引、第一数据块和第一停留时长等词语中的“第一”,以及文中的“第二”(如果存在),仅仅是为了区分和描述方便,而不具有任何限定意义。
上述内容对本说明书的特定实施例进行了描述,其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行,并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的,或者可能是有利的。
图5为实施例提供的一种数据查询装置的示意性框图。其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块。该装置实施例与图2所示方法实施例相对应。该装置可以部署在计算设备中,或者部署在计算设备的数据库引擎中。该装置500包括:
第一确定模块510,配置为确定待查询键值对数据的键,作为第一键;
第一匹配模块520,配置为基于所述第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;
第一路径模块530,配置为基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块;
第一读取模块540,配置为基于所述匹配路径上的最后一层索引块指向的键值对数据,从所述第一文件中读取待查询键值对数据。
在一种实施方式中,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
在一种实施方式中,所述第一路径模块530包括:
第一路径子模块(图中未示出),配置为当所述待查询键值对数据属于所述业务数据时,基于所述第一键,从所述第一文件的第一树形索引中确定匹配路径上的索引块;
第二路径子模块(图中未示出),配置为当所述待查询键值对数据属于所述元数据时,基于所述第一键,从所述第一文件的第二树形索引中确定匹配路径上的索引块。
在一种实施方式中,键值对数据以文件中的数据块形式存储;所述第一树形索引的最后一层索引块指向业务数据块,所述业务数据块中包含若干个业务数据;
所述第一读取模块540具体配置为:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的业务数据块中确定第一数据块;
从所述第一文件中读取所述第一数据块,从所述第一数据块中获取待查询键值对数据。
在一种实施方式中,键值对数据以文件中的数据块形式存储;所述第二树形索引的最后一层索引块指向元数据块,所述元数据块中包含若干个所述元数据;
所述第一读取模块540具体配置为:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的元数据块中确定第二数据块;
从所述第一文件中读取所述第二数据块,从所述第二数据块中获取待查询键值对数据。
在一种实施方式中,所述装置500还包括:
第一缓存模块(图中未示出),配置为在从所述第一文件的树形索引中确定匹配路径上的索引块之后,将所述匹配路径上的索引块缓存在内存中。
在一种实施方式中,所述第一缓存模块包括:
第一缓存子模块(图中未示出),配置为基于第一停留时长,将所述第一树形索引对应的匹配路径上的索引块缓存在所述内存中;
第二缓存子模块(图中未示出),配置为基于第二停留时长,将所述第二树形索引对应的匹配路径上的索引块缓存在所述内存中;
其中,所述第一停留时长大于所述第二停留时长。
在一种实施方式中,所述第一路径模块530具体配置为:
基于所述第一键与所述树形索引中各层索引块中键的逐级匹配,从所述树形索引中确定匹配路径上的索引块。
在一种实施方式中,所述第一路径模块530包括:
第一读取子模块(图中未示出),配置为从所述树形索引中读取根索引块,作为当前索引块;
第一匹配子模块(图中未示出),配置为将所述第一键与所述当前索引块中的若干个键进行匹配,将匹配成功的键对应的下一层索引块作为匹配路径上的索引块;
第一更新子模块(图中未示出),配置为当所述下一层索引块不是最后一层索引块时,将所述下一层索引块作为当前索引块,返回执行所述第一匹配子模块;
第一确定子模块(图中未示出),配置为当所述下一层索引块是最后一层索引块时,确定匹配路径上的所有索引块。
在一种实施方式中,所述装置500还包括:
第一复用模块(图中未示出),配置为当多个数据层的文件进行合并之后,如果所述最后一层索引块指向的键值对数据未进行更新,则复用所述匹配路径上的索引块,以建立合并后的树形索引。
图6为实施例提供的一种数据存储装置的示意性框图。该装置通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块。该装置可以部署在计算设备中,或者部署在计算设备的数据库引擎中。该装置实施例与图4所示方法实施例相对应。该装置600包括:
第二确定模块610,配置为确定待存储键值对数据,将所述待存储键值对数据的键作为第一键;
第一存储模块620,配置为基于第一键,将所述待存储键值对数据存储在对应的第一文件中;
第一生成模块630,配置为当所述第一文件中尚未存在树形索引时,基于所述第一文件中已存储的键值对数据生成树形索引;所述树形索引指向已存储的键值对数据,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;
第一更新模块640,配置为当所述第一文件中已经存在树形索引时,基于所述待存储键值对数据更新所述树形索引。
在一种实施方式中,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
上述各个装置实施例与方法实施例相对应,具体说明可以参见方法实施例部分的描述,此处不再赘述。装置实施例是基于对应的方法实施例得到,与对应的方法实施例具有同样的技术效果,具体说明可参见对应的方法实施例。
本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行图1至图4任一项所述的方法。
本说明书实施例还提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现图1至图4任一项所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于存储介质和计算设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明实施例的目的、技术方案和有益效果进行了进一步的详细说明。所应理解的是,以上所述仅为本发明实施例的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (16)
1.一种数据查询方法,其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述方法包括:
确定待查询键值对数据的键,作为第一键;
基于所述第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;
基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块;
基于所述匹配路径上的最后一层索引块指向的键值对数据,从所述第一文件中读取待查询键值对数据。
2.根据权利要求1所述的方法,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
3.根据权利要求2所述的方法,所述基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块的步骤,包括:
当所述待查询键值对数据属于所述业务数据时,基于所述第一键,从所述第一文件的第一树形索引中确定匹配路径上的索引块;
当所述待查询键值对数据属于所述元数据时,基于所述第一键,从所述第一文件的第二树形索引中确定匹配路径上的索引块。
4.根据权利要求3所述的方法,键值对数据以文件中的数据块形式存储;所述第一树形索引的最后一层索引块指向业务数据块,所述业务数据块中包含若干个业务数据;
所述从所述第一文件中读取待查询键值对数据的步骤,包括:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的业务数据块中确定第一数据块;
从所述第一文件中读取所述第一数据块,从所述第一数据块中获取待查询键值对数据。
5.根据权利要求3所述的方法,键值对数据以文件中的数据块形式存储;所述第二树形索引的最后一层索引块指向元数据块,所述元数据块中包含若干个所述元数据;
所述从所述第一文件中读取待查询键值对数据的步骤,包括:
利用所述第一键与最后一层索引块中键的匹配结果,从所述最后一层索引块指向的元数据块中确定第二数据块;
从所述第一文件中读取所述第二数据块,从所述第二数据块中获取待查询键值对数据。
6.根据权利要求2所述的方法,在从所述第一文件的树形索引中确定匹配路径上的索引块之后,所述方法还包括:
将所述匹配路径上的索引块缓存在内存中。
7.根据权利要求6所述的方法,所述将所述匹配路径上的索引块缓存在内存中的步骤,包括:
基于第一停留时长,将所述第一树形索引对应的匹配路径上的索引块缓存在所述内存中;
基于第二停留时长,将所述第二树形索引对应的匹配路径上的索引块缓存在所述内存中;
其中,所述第一停留时长大于所述第二停留时长。
8.根据权利要求1所述的方法,所述基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块的步骤,包括:
基于所述第一键与所述树形索引中各层索引块中键的逐级匹配,从所述树形索引中确定匹配路径上的索引块。
9.根据权利要求8所述的方法,所述从所述树形索引中确定匹配路径上的索引块的步骤,包括:
从所述树形索引中读取根索引块,作为当前索引块;
将所述第一键与所述当前索引块中的若干个键进行匹配,将匹配成功的键对应的下一层索引块作为匹配路径上的索引块;
当所述下一层索引块不是最后一层索引块时,将所述下一层索引块作为当前索引块,返回执行所述将所述第一键与所述当前索引块中的若干个键进行匹配的步骤;
当所述下一层索引块是最后一层索引块时,确定匹配路径上的所有索引块。
10.根据权利要求1所述的方法,所述方法还包括:
当多个数据层的文件进行合并之后,如果所述最后一层索引块指向的键值对数据未进行更新,则复用所述匹配路径上的索引块,以建立合并后的树形索引。
11.一种数据存储方法,通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述方法包括:
确定待存储键值对数据,将所述待存储键值对数据的键作为第一键;
基于所述第一键,将所述待存储键值对数据存储在对应的第一文件中;
当所述第一文件中尚未存在树形索引时,基于所述第一文件中已存储的键值对数据生成树形索引;所述树形索引指向已存储的键值对数据,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;
当所述第一文件中已经存在树形索引时,基于所述待存储键值对数据更新所述树形索引。
12.根据权利要求11所述的方法,所述键值对数据属于业务数据,或者,属于所述业务数据的元数据;所述树形索引包括针对所述业务数据的第一树形索引和针对所述元数据的第二树形索引。
13.一种数据查询装置,其中,键值对数据通过多数据层结构以文件的形式存储在非易失性存储器中,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述装置包括:
第一确定模块,配置为确定待查询键值对数据的键,作为第一键;
第一匹配模块,配置为基于所述第一键与文件对应的键范围的匹配,从若干个文件中确定第一文件;
第一路径模块,配置为基于所述第一键,从所述第一文件的树形索引中确定匹配路径上的索引块;
第一读取模块,配置为基于所述匹配路径上的最后一层索引块指向的键值对数据,从所述第一文件中读取待查询键值对数据。
14.一种数据存储装置,通过多数据层结构以文件的形式在非易失性存储器中存储键值对数据,文件中包含指向键值对数据的树形索引,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;所述装置包括:
第二确定模块,配置为确定待存储键值对数据,将所述待存储键值对数据的键作为第一键;
第一存储模块,配置为基于所述第一键,将所述待存储键值对数据存储在对应的第一文件中;
第一生成模块,配置为当所述第一文件中尚未存在树形索引时,基于所述第一文件中已存储的键值对数据生成树形索引;所述树形索引指向已存储的键值对数据,所述树形索引包括若干个索引块,索引块包含若干个键及其指向的下一层索引块;
第一更新模块,配置为当所述第一文件中已经存在树形索引时,基于所述待存储键值对数据更新所述树形索引。
15.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-12中任一项所述的方法。
16.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211063011.5A CN115145954A (zh) | 2022-09-01 | 2022-09-01 | 一种数据查询方法、数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211063011.5A CN115145954A (zh) | 2022-09-01 | 2022-09-01 | 一种数据查询方法、数据存储方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115145954A true CN115145954A (zh) | 2022-10-04 |
Family
ID=83415666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211063011.5A Pending CN115145954A (zh) | 2022-09-01 | 2022-09-01 | 一种数据查询方法、数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115145954A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069074A (zh) * | 2024-04-22 | 2024-05-24 | 联想凌拓科技有限公司 | 一种数据处理方法及装置、存储介质、计算机程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666302A (zh) * | 2020-05-28 | 2020-09-15 | 广州虎牙科技有限公司 | 用户排名的查询方法、装置、设备及存储介质 |
CN112486994A (zh) * | 2020-11-30 | 2021-03-12 | 武汉大学 | 一种基于日志结构合并树的键值存储的数据快速读取方法 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
US20220075765A1 (en) * | 2020-09-07 | 2022-03-10 | Pliops Ltd. | Managing a lsm tree of key value pairs that is stored in a non-volatile memory |
-
2022
- 2022-09-01 CN CN202211063011.5A patent/CN115145954A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111666302A (zh) * | 2020-05-28 | 2020-09-15 | 广州虎牙科技有限公司 | 用户排名的查询方法、装置、设备及存储介质 |
US20220075765A1 (en) * | 2020-09-07 | 2022-03-10 | Pliops Ltd. | Managing a lsm tree of key value pairs that is stored in a non-volatile memory |
CN112486994A (zh) * | 2020-11-30 | 2021-03-12 | 武汉大学 | 一种基于日志结构合并树的键值存储的数据快速读取方法 |
CN113961514A (zh) * | 2021-12-20 | 2022-01-21 | 支付宝(杭州)信息技术有限公司 | 数据查询方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069074A (zh) * | 2024-04-22 | 2024-05-24 | 联想凌拓科技有限公司 | 一种数据处理方法及装置、存储介质、计算机程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US8868926B2 (en) | Cryptographic hash database | |
KR102564170B1 (ko) | 데이터 객체 저장 방법, 장치, 및 이를 이용한 컴퓨터 프로그램이 저장되는 컴퓨터 판독가능한 저장 매체 | |
EP2324440B1 (en) | Providing data structures for determining whether keys of an index are present in a storage system | |
CN113961514B (zh) | 数据查询方法及装置 | |
CN108121813B (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
CN111309720A (zh) | 时序数据的存储、读取方法、装置、电子设备及存储介质 | |
US20100228914A1 (en) | Data caching system and method for implementing large capacity cache | |
CN113535670B (zh) | 一种虚拟化资源镜像存储系统及其实现方法 | |
CN113094336B (zh) | 基于Cuckoo哈希的文件系统目录管理方法及系统 | |
CN113407550A (zh) | 数据存储及查询方法、装置及数据库系统 | |
CN114090637B (zh) | 数据存取方法、装置、设备及存储介质 | |
CN115145954A (zh) | 一种数据查询方法、数据存储方法及装置 | |
CN109325022B (zh) | 一种数据处理方法和装置 | |
CN112306957A (zh) | 获取索引节点号的方法、装置、计算设备和存储介质 | |
CN113568868A (zh) | 文件系统管理方法、系统、电子设备及介质 | |
US8156126B2 (en) | Method for the allocation of data on physical media by a file system that eliminates duplicate data | |
US20200019539A1 (en) | Efficient and light-weight indexing for massive blob/objects | |
CN113204520A (zh) | 一种基于分布式文件系统的遥感数据快速并发读写方法 | |
CN116048396B (zh) | 基于日志结构化合并树的数据存储装置和存储控制方法 | |
CN117093579A (zh) | 数据查询、数据存储方法、装置、设备及存储介质 | |
CN114969034A (zh) | LSM-Tree架构数据库有序表的查询方法和装置 | |
CN109325023B (zh) | 一种数据处理方法及装置 | |
KR101368441B1 (ko) | 데이터베이스의 공간 재사용 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 | |
CN114416676A (zh) | 数据处理方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |