CN115374127B - 数据存储方法及装置 - Google Patents

数据存储方法及装置 Download PDF

Info

Publication number
CN115374127B
CN115374127B CN202211292254.6A CN202211292254A CN115374127B CN 115374127 B CN115374127 B CN 115374127B CN 202211292254 A CN202211292254 A CN 202211292254A CN 115374127 B CN115374127 B CN 115374127B
Authority
CN
China
Prior art keywords
index
block
blocks
data
tree
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.)
Active
Application number
CN202211292254.6A
Other languages
English (en)
Other versions
CN115374127A (zh
Inventor
高思远
赵赛铜
陈嘉华
涂云山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202211292254.6A priority Critical patent/CN115374127B/zh
Publication of CN115374127A publication Critical patent/CN115374127A/zh
Application granted granted Critical
Publication of CN115374127B publication Critical patent/CN115374127B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本说明书实施例提供一种数据存储方法和装置,存储方法包括,执行n个并行任务,其中任意并行任务包括,生成多个数据块以及对应的索引指示信息,索引指示信息指示多个数据块在磁盘中存储位置的第一索引记录。基于此执行合并任务,其中包括,基于n个并行任务输出的索引指示信息,建立具有层级索引结构的索引树,在内存中存储所述索引树的根索引块;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录。

Description

数据存储方法及装置
技术领域
本说明书一个或多个实施例涉及数据库,尤其涉及一种数据存储方法及装置。
背景技术
随着互联网的发展,产生了海量数据存储需求。海量数据可以包括租户或用户的个人数据、隐私数据等,这些数据常常以数据表的形式,存储于数据库集群中。为了高效地进行数据的存储和管理,目前多种主流的数据库采用LSM(Log Structured Merge)的存储方式,通过增量写日志与多级日志数据合并实现数据存储。在此架构下,一般采用SSTable(sorted-string table)的数据结构,进行数据的持久化存储。根据SSTable,将数据按照主键key进行排序,从而提供有序的数据存储,索引与查询服务。
为了快速地实现数据的查询和管理,在当前的数据库管理引擎中,会获取持久化存储到磁盘的SSTable中各数据块的元数据,将其常态化存储到内存中,从而便于利用这些元数据,辅助执行数据的检索查询。然而,随着数据量的增大,这些常驻内存的元数据大量占用内存,成为内存性能和管理的瓶颈。例如,某种数据库的SSTable按照2M切分数据块,对于每2M的数据块,在内存中就会有对应的约200 byte ~ 16 Kbyte的元数据。随着数据块数量线性增长,在百万租户的场景下,相应具有大量的元数据,这些元数据对内存的常态占用成为内存管理的一个瓶颈。因此,迫切需要改进的技术手段,改善上述内存管理瓶颈问题。
发明内容
鉴于上述问题,本说明书提供了一种数据存储方法,通过将元数据构建为索引树,仅在内存中存储索引树的部分节点信息,减少常驻内存的元数据存储量,提升内存性能。
根据第一方面,提供一种数据存储方法,包括:
执行n个并行任务,其中任意并行任务包括,生成多个数据块以及对应的索引指示信息,所述索引指示信息指示所述多个数据块在磁盘中存储位置的第一索引记录;
执行合并任务,其中包括,基于所述n个并行任务输出的索引指示信息,建立具有层级索引结构的索引树,在内存中存储所述索引树的根索引块;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录。
在一个实施例中,在执行多个并行任务之前,先按照主键值将有待存储的目标数据表划分为与所述n个并行任务对应的n个数据区间;所述多个数据块是所述任意并行任务对应的数据区间中的数据块。
根据第一种实施方式,生成多个数据块以及对应的索引指示信息,包括:在生成多个数据块的过程中,建立预设层数H、具有所述层级索引结构的子树,并导出所述子树的第一根索引块作为所述索引指示信息;建立具有层级索引结构的索引树,包括:基于所述n个并行任务输出的n个第一根索引块,建立合并树,至少基于所述合并树形成所述索引树。
在第一种实施方式的一个实施例中,建立预设层数H、具有层级索引结构的子树,具体包括:生成第一数据块,并根据所述第一数据块在磁盘中的存储位置生成第一索引记录;将所述第一索引记录写入内存中存储的所述子树的底层索引块。
进一步的,在一个实施例中,建立子树的过程还包括:在第一根索引块未写满的情况下,从底层向上,分别将内存中所述子树的除第一根索引块的各已有层索引块作为目标索引块执行第一操作,所述第一操作包括,若目标索引块达到第一阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第二索引记录;将所述第二索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间。
更进一步的,将所述第二索引记录存储至所述目标索引块的高一层级索引块,具体包括:判断内存中是否存在所述目标索引块的高一层级索引块,若不存在,创建该高一层级索引块,并将所述第二索引记录存储至该高一层级索引块中。
在第一种实施方式的一个实施例中,导出所述子树的第一根索引块,包括:依次将从底层到第H-1层的各层索引块作为目标索引块执行第二操作,所述第二操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第三索引记录;将所述第三索引记录存储至所述目标索引块的高一层级索引块;输出执行所述第二操作后的第一根索引块。
在第一种实施方式的一个实施例中,基于n个第一根索引块建立合并树,包括:将所述n个第一根索引块进行排序;从排序后的n个第一根索引块中,依次读取索引记录,将其写入内存中存储的所述合并树的底层索引块;从底层向上,分别将内存中所述合并树的各已有层索引块作为目标索引块执行第三操作,所述第三操作包括,若目标索引块达到第二阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第四索引记录;将所述第四索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间;响应于所述n个第一根索引块中所有索引记录写入完毕,导出内存中存储的所述合并树的最高层索引块,作为所述索引树的根索引块。
进一步的,在一个实施例中,导出内存中存储的所述索引总树的最高层索引块,具体包括:从底层向上,依次将内存中所述合并树的除最高层之外的各已有层索引块作为目标索引块执行第四操作,所述第四操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第五索引记录;将所述第五索引记录存储至所述目标索引块的高一层级索引块;输出执行所述第四操作后的所述合并树的最高层索引块。
根据第二种实施方式,生成多个数据块以及对应的索引指示信息,包括:每生成一个数据块,根据该数据块在磁盘中的存储位置生成对应的第一索引记录,存储于内存中;内存中存储的所述多个数据块的多条第一索引记录构成所述索引指示信息。
根据第二种实施方式的一个实施例,建立具有层级索引结构的索引树,具体包括:将所述索引指示信息中的各条第一索引记录,依次写入索引树的底层索引块;从底层向上,分别将各已有层索引块作为目标索引块执行目标操作,所述目标操作包括,若目标索引块达到预设阈值,根据目标索引块在磁盘的存储位置生成第六索引记录,将所述第六索引记录存储至所述目标索引块的高一层级索引块;响应于所述索引指示信息中所有索引记录写入完毕,导出所述索引树的最高层索引块作为根索引块。
根据第三种实施方式,生成多个数据块以及对应的索引指示信息,包括:在生成所述多个数据块之后,根据各个数据块在磁盘中的存储位置生成对应的多条第一索引记录;根据多条第一索引记录,生成具有所述层级索引结构的索引子树作为所述索引指示信息,所述索引子树的底层索引块用于记录所述多条第一索引记录。
根据第三种实施方式的一个实施例,建立具有层级索引结构的索引总树,包括:合并所述n个并行任务对应的n个索引子树,得到所述索引总树。
根据第二方面,提供了一种数据存储装置,包括n个并行任务执行单元,以及合并任务执行单元,其中:
任意并行任务执行单元配置为,生成多个数据块以及对应的索引指示信息,所述索引指示信息指示所述多个数据块在磁盘中存储位置的第一索引记录;
所述合并任务执行单元配置为,基于所述n个并行任务执行单元输出的索引指示信息,建立具有层级索引结构的索引树,在内存中存储所述索引树的根索引块;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面所述的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
在本说明书实施例中,通过由n个并行任务各自在生成数据块的基础上,输出索引指示信息,其指示数据块在磁盘中的存储位置。然后由合并任务基于各个并行任务输出的索引指示信息,建立具有层级索引结构的索引树。在该索引树中,底层索引块中存储数据块在磁盘中存储位置的索引记录,非底层的每一索引块中存储其低一层索引块在磁盘中存储位置的索引记录。在内存中,可以仅存储索引树的根索引块,各数据块的原始元数据可以从根索引块开始,经由各层索引块,逐层索引定位到磁盘存储位置。如此,指数级地缩减了常驻内存的元数据数量,提升内存的性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出根据一个实施例通过索引树优化元数据存储的示意图;
图2示出根据一个实施例的数据存储方法的流程图;
图3示例性示出在一个具体例子中划分的多个数据区间;
图4示出在一个实施例中并行任务生成索引子树的流程图;
图5示出一个索引子树的具体例子;
图6示出在一个实施例中导出根索引块的流程图;
图7示出在一个实施例中通过合并任务建立合并树的流程;
图8示出根据一个实施例的数据存储装置的结构示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
如前所述,在当前的数据库管理引擎中,在内存中常态化存储SSTable中数据块的元数据,从而带来内存的占用和性能劣化问题。为了缓解/解决这一问题,在本说明书的实施例中,提出一种新的方案,其中将SSTable数据块的元数据持久化存储至磁盘,并将其持久化存储的索引信息整理为索引树的形式,仅在内存中常态化存储该索引树的部分节点,从而大大缩减常驻内存的元数据容量,极大提升内存的性能。
图1示出根据一个实施例通过索引树优化元数据存储的示意图。如图1所示,一个SStable表可以被划分为n个区间(例如分区),通过n个并行任务,分别执行对应区间的数据块存储。具体的,每个并行任务可以生成对应区间中的多个数据块,将其存储至磁盘,并生成该多个数据块对应的索引指示信息。在一个示例中,该索引指示信息可以包括,各个数据块在磁盘中存储位置的索引记录;在另一示例中,该索引指示信息也可以是,基于这些索引记录生成的、用于指示这些索引记录的索引子树。
各个并行任务将其生成的索引指示信息输出到合并任务。合并任务基于n个并行任务输出的索引指示信息,建立具有层级索引结构的索引树。在最终生成的整个索引树中,底层(叶子层)索引块中存储SSTable的数据块在磁盘中存储位置的索引记录,非底层的每一索引块中存储其低一层索引块在磁盘中存储位置的索引记录。也就是说,不仅SSTable的数据块持久化落盘存储,记录数据块存储位置的元数据也落盘存储,并在其上一层索引块中记录落盘存储的索引,直到根索引块。最终在内存中,可以仅存储索引树的根索引块,各数据块的原始元数据可以从根索引块开始,经由各层索引块,逐层索引定位到磁盘存储位置。如此,指数级地缩减了常驻内存的元数据数量,提升内存的性能。
下面具体描述上述方案的执行过程。
图2示出根据一个实施例的数据存储方法的流程图。该方法可以通过数据库系统中的存储引擎执行,其可以实现为具有计算、处理能力的计算单元、平台、服务器、设备等。
通常地,在执行图2的方法流程之前,首先根据待存储的数据表进行并行任务的设置和初始化。具体的,可以确定有待存储的目标数据表,例如按照SSTable的数据格式整理的数据表,根据目标数据表的大小,确定需要启动的n个并行任务。一个并行任务可以对应于一个进程或线程。所确定的n个并行任务可以是可用的全部并行任务,或者是其中的一部分。然后,将目标数据表划分为n个数据区间,将这n个数据区间中的数据生成任务分别分配给n个并行任务。由于SSTable中,数据依照主键key值依序排列,因此,n个数据区间分别对应于依序排列的主键值区间。
图3示例性示出在一个具体例子中,划分的多个数据区间,其中数据区间A对应于主键值从bad开始到banal之间的数据,数据区间B对应于主键key值banalize到bandbox之间的数据,数据区间C对应于主键值从bandboxy开始的数据。数据区间之间,以及数据区间之内,待存储的数据都按照主键值排序。在一个具体例子中,n个数据区间分别对应于待存储的目标数据表的n个分区。
在进行任务划分的基础上,执行图2中的数据存储方法。其中,在步骤21,执行n个并行任务,其中任意并行任务包括,生成多个数据块以及对应的索引指示信息,所述索引指示信息指示多个数据块在磁盘中存储位置的索引记录。可以理解,每个并行任务对应的多个数据块,是在前述任务确定和分配阶段分配给该并行任务的数据区间中的数据块。并行任务执行过程中,不仅需要生成对应的数据块,将其存储至磁盘,还需要根据各个数据块在磁盘中的存储位置形成索引记录,并根据多个数据块的索引记录生成索引指示信息。该索引指示信息可以是索引记录本身,或者指示这些索引记录的索引子树。
当n个并行任务均执行完毕,在步骤22,执行合并任务,其中包括,基于n个并行任务各自输出的索引指示信息,建立具有层级索引结构的索引树,在内存中存储所述索引树的根索引块;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;该索引树的底层索引块存储前述数据块的索引记录。由于在内存中常驻存储的是索引树的根索引块,而非各个数据块的索引记录,使得元数据对内存的占用量大大减小。
图2的方法流程具有多种实施方式。以下分别描述。
根据第一种实施方式,步骤21实现为步骤211,其中n个并行任务中的任意并行任务,在生成数据块过程中,同步构建具有相等预设层数H的索引子树,形成索引指示信息。相应的,步骤22实现为步骤221,其中,合并任务根据n个并行任务输出的n个索引子树的信息,建立合并树。索引子树与合并树共同构成目标数据表的一棵平衡索引树。最终在内存中,常驻存储该平衡索引树的根索引块。
具体地,在步骤211执行各个并行任务之前,首先设置子树的高度值H,在内存中开辟底层索引块的存储空间M1,并设置各层索引块的存储阈值T1。在进行上述设置之后,从当前层高h=1开始执行并行任务。下面描述任一并行任务的执行过程。
该并行任务针对有待存储的数据区间,不断生成数据块。数据块的大小根据数据库存储机制而设定。例如,某种主流数据库将数据划分为2M一个的数据块,每个数据块中包含依序排列的键值对(k,v)。并行任务每生成一个数据块D,将其存储至磁盘,并根据数据块D在磁盘中的存储位置p生成一条索引记录,下文称为第一索引记录。具体地,第一索引记录的形式例如是idx<p,D>。并行任务将生成的第一索引记录写入内存中存储的底层索引块M1。
如果底层索引块M1没有达到存储阈值T1,则继续生成数据块,将其第一索引记录写入底层索引块M1。在底层索引块M1达到存储阈值T1的情况下,将底层索引块M1转存到磁盘,根据转存位置生成索引块的索引记录,下文称为第二索引记录,将该第二索引记录写入高一层级索引块,也就是层高h=2的索引块M2,并清空底层索引块M1的存储空间,用于后续继续存储第一索引记录。如果索引块M2也达到阈值T1,则继续进行磁盘转存和向高一层级索引块写入索引的操作。也就是说,在子树的根索引块(高度为H的索引块MH)未写满的情况下,从底层向上,分别将内存中除根索引块的各已有层索引块作为目标索引块执行第一操作,所述第一操作包括,若目标索引块达到第一阈值T1,将其中的索引记录转存至磁盘,并根据转存位置生成第二索引记录;将第二索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间。如果根索引块已经写满,而数据块还未生成完毕,则强行将后续生成的数据块的第一索引记录存储在底层索引块M1中。持续进行以上操作,直到完成本并行任务下所有数据块的生成。
图4示出在一个实施例中并行任务生成索引子树的流程图,图5示出一个索引子树的具体例子。在图5的例子中,假定设置子树的高度H=3,简单起见,假设各索引块的存储阈值T1对应于存储4条索引记录。下面结合图4和图5,描述在一个例子中索引子树的构建过程。
如图4所示,首先在步骤41,确定是否有新的数据块。若有,进入步骤42,为其建立一条索引。假定当前需生成第一个数据块D1,则在步骤42,确定D1在磁盘的存储位置,据此建立一条第一索引记录P1。在步骤42后,令h=1,并前进至步骤43,将索引记录写入当前高度h的索引块。此时,将第一索引记录P1写入h=1的底层索引块M1。然后在步骤44,判断当前索引块M大小是否达到阈值T1。若没有达到,回到步骤41,继续新 数据块的生成判断。对于当前的底层索引块M1而言,其仅存储了一条索引记录P1,没有达到阈值,继续生成后续数据块。
可以理解,对于后续依次生成的数据块D2,D3和D4,将会反复执行步骤41-43,从分别将对应的第一索引记录P2,P3和P4相继写入底层索引块M1。在对数据块D4执行完步骤43之后,在步骤44,可以判断出当前索引块M1大小达到了阈值T1(存储4条索引)。于是,流程前进至步骤45,判断当前高度h是否达到子树高度H。如果没有,执行后续的步骤46-48,即前述的第一操作。在步骤46,判断内存中是否存在h+1的索引块,若没有,则在步骤47,生成高度为h+1的索引块,前进至步骤48;若有则直接执行步骤48。在步骤48,将当前高度h的索引块转存到磁盘,生成其对应的索引记录,即第二索引记录。并在将当前高度h增加1,即令h=h+1后,回到步骤43,将索引记录写入高度为h的索引块。
延续之前图5的例子。在底层索引块M1由于记录了第一索引记录P1-P4而达到阈值时,此时,当前索引块高度为h=1,没有达到H,因此,前进至步骤46。由于初始化时仅针对h=1的底层索引块开辟了内存空间,因此此时内存中尚不存在h+1的索引块M2。于是在步骤47,生成h=2的索引块M2。接着在步骤48,将当前高度h=1的底层索引块M1转存至磁盘,也就是将第一索引记录P1-P4的内容转存至磁盘,并根据转存位置生成一条第二索引记录I1。在令h增1,从而将当前高度设为h=2后,回到步骤43,在其中,将索引记录I1写入当前索引高度2的索引块M2。
之后,在步骤44,判断当前索引块,即M2,大小是否达到阈值T1。此时,M2中仅存储有索引记录I1,没有达到阈值,于是回到步骤41,继续生成新的数据块D5,并在步骤42生成其对应的第一索引记录P5。
需要留意的是,当经由步骤42前进至步骤43时,会再次将当前高度h重置为1。并且,在前一次执行到步骤48时,已经将底层索引块M1进行转存和内存空间的清理,因此,此时底层索引块M1已经清空,可以再次存储第一索引记录。因此,在步骤43,将索引记录P5写入当前高度的索引块,即底层索引块M1。并且,在步骤44,确定当前索引块M1没有达到阈值,再次回到步骤41,继续生成数据块。
可以理解,对于后续依次生成的数据块D6,D7和D8,将会反复执行步骤41-43,从而将分别对应的第一索引记录P6,P7和P8都相继写入底层索引块M1。在对数据块D8执行完步骤43之后,在步骤44,可以判断出当前索引块M1大小(再次)达到了阈值T1。于是,流程前进至步骤45,由于当前高度h没有达到子树高度H,又前进至步骤46。注意此时,内存中已经存在高度为h+1的索引块M2,且其中已经存储了一条第二索引记录I1。于是直接前进至步骤48,将当前高度h=1的底层索引块M1再次转存至磁盘,也就是将第一索引记录P5-P8的内容转存至磁盘,并根据转存位置生成第二条第二索引记录I2。在令h增1,从而将当前高度设为h=2后,回到步骤43,在其中,将索引记录I2写入当前高度2的索引块M2。
上述过程持续进行。可以理解,当生成数据块D16,并将其第一索引记录P16写入到底层索引块M1之后,流程进行到步骤48时,将底层索引块M1再次落盘,生成第二索引记录I4,回到步骤43,将第二索引记录写入当前高度h=2的索引块M2。此时,索引块M2也达到了阈值T1(步骤44判断为是),但是当前高度2尚未达到子树高度H(步骤45判断为否)。此时,在步骤46,确定内存中尚不存在高度为h+1=3的索引块,因此在步骤47,生成高度为3的索引块M3。需理解,在图5的示例中,索引块M3即为高度为H的根索引块。接着,在步骤48,将当前高度h=2的索引块M2转存至磁盘,也就是将第二索引记录I1-I4的内容转存至磁盘,并根据转存位置生成第二索引记录J1。接着,令h增1,当前高度达到3,回到步骤43,将索引记录J1写入当前高度h=3的索引块M3。
以上过程持续进行,直到完成数据块生成。在一种情况下,并行任务要处理的数据块数量不多,在根索引块M3没有写满的情况下,已经完成并行任务所分配的所有数据块的生成。这又包含两种情况。情况A:已经生成根索引块,但是根索引块并未写满。例如,如图5所示,在将J1写入根索引块M3,并将数据块D17和D18的索引记录P17和P18写入底层索引块M1后,数据块生成完毕。也可能存在情况B,其中只写到h=2的索引块M2,甚至都没有创建h=3的索引块M3,就已经完成单个并行任务的数据块生成。例如,如果并行任务要处理的数据块不足16个数据块,那么根据以上构建方式,索引块M2没有达到阈值,并未创建索引块M3就已完成数据块生成。而在另一种情况,即情况C下,并行任务要处理的数据块数量较多,在写满根索引块后仍需继续生成新的数据块。例如,根索引块中已经写入h=2层的索引块M2在4次磁盘转存中生成的4个索引记录J1,J2,J3,J4,仍有新的数据块要生成。在这样的情况下,突破底层索引块M1的阈值限制,继续将后续数据块的第一索引记录写入底层索引块M1而不对M1进行磁盘转存。如图4中步骤45判断为是的分支所示,继续回到数据块生成和索引写入的步骤,强行继续在M1中写入第一索引记录,直到完成所有数据块的生成。
在以上各种情况下,如图4所示,当不再需要生成新的数据块,也就是并行任务已经完成所分配数据区间所有数据块的生成,步骤41的判断为否,流程前进至步骤49,导出所构建索引子树的根索引块,下文称为第一根索引块。需理解的是,在以上一边生成数据块一边构建索引子树的过程中,内存中存储了所用到的若干子树层级的索引块的信息,例如,图5的例子中存储了M1,M2和M3三个层级的索引块。当确定无需生成新的数据块时,需要将除根节点之外的各层索引块的信息都落盘存储,将其索引信息分层导出到根索引块,从而最终仅在内存中保留和输出根索引块的存储内容。
为此,在上述导出步骤,依次将从底层到第H-1层的各层索引块作为目标索引块执行第二操作,该第二操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第三索引记录;将第三索引记录存储至所述目标索引块的高一层级索引块。对于转存之后的目标索引块,可以在内存中清除为其开辟的内存空间。在从底层到第H-1层依次执行上述第二操作后,输出执行第二操作后的第一根索引块。
可以看到,这里的第二操作与生成索引子树过程中的第一操作有以下几处不同。在第一操作中,已有的目标索引块写满之后,才会将其落盘存储,并将其索引信息写入高一层级索引块;而在第二操作中,将从底层到H-1层的每层索引块(包括之前可能没有创建的索引块)依次作为目标索引块,不管目标索引块当前是否写满,都对其进行落盘存储,从而在根索引块中记录H层级的索引。
图6示出在一个实施例中导出根索引块的流程图。图4中步骤49可以采用图6的导出流程实现。如图6所示,从高度h=1开始,反复执行以下流程。在步骤61,判断是否存在高一层级(h+1)索引块。如果存在,前进至步骤62,将当前高度h的索引块转存至磁盘,并生成其索引记录,即第三索引记录。进而在步骤63,将生成的索引记录写入高一层级(h+1)索引块。然后,令高度h增1,回到步骤61继续判断。如果步骤61的判断结果是并不存在高一层级索引块,前进至步骤64,判断当前索引高度h是否达到阈值H。如果没有,则在步骤65,生成高一层级索引块,并跳转至步骤62。上述流程反复执行,直到当前高度h达到阈值H,即步骤64判断结果为是,此时,前进至步骤66,输出此时的当前索引块,作为第一根索引块。
仍结合图5的例子描述索引子树的导出过程,其中导出过程的索引写入用虚线箭头示出。对于h=1,在步骤61,确定存在高一层级索引块,即M2。因此,在步骤62,将当前高度的索引块,即底层索引块M1转存至磁盘。尽管此时M1仅存储了第一索引记录P17和P18,仍然将其落盘存储,得到第三索引记录I5。在步骤63,将生成的索引记录I5写入高一层级索引块M2。然后,当前高度h升为2。
针对h=2,再次执行步骤61,62和63,将索引块M2落盘存储(其中仅包含索引记录I5),并将得到的第三索引记录J2写入高一层级索引块M3。然后,当前高度h升为3。
针对h=3,步骤61的判断结果为否,且步骤64的判断结果为是,于是在步骤66,输出当前高度索引块M3,作为第一根索引块。如此,输出的第一根索引块中包含索引记录J1和J2。
如前所述,图5的例子属于已经生成根索引块(M3),但是根索引块并未写满的情况A。而在情况B中,会出现步骤61和步骤64判断结果均为否的情况,也就是针对未达到H的当前层级,不存在高一层级索引块的情况。此时,流程执行步骤65的分支,在其中生成该高一层级索引块。而在前述情况C中,执行的流程分支与情况A相同,只是在导出时,底层索引块中存储了超过阈值T1的索引记录,最后的第一根索引块在原有基础上也会超量多存储一条索引记录。
如此,通过以上图4和图6的流程,并行任务生成高度为H的索引子树,并导出其根索引块(即第一根索引块)存储于内存中。除根索引块外的其他索引块,则落盘持久化存储,并可通过根索引块,逐层索引到其存储位置。
在n个并行任务均执行完毕后,分别输出n个第一根索引块。基于此,可以执行前述步骤221,启动合并任务,该合并任务根据n个并行任务输出的n个第一根索引块,建立合并树,基于合并树形成完整的平衡索引树。该步骤221的执行可以包括以下过程。
首先,将n个第一根索引块进行排序。如前所述,n个并行任务各自对应SSTable形式的目标数据表的n个数据区间,且n个数据区间是按照数据主键值key大小进行排序划分的。如此,可以根据n个数据区间的大小顺序,对相应的n个第一根索引块进行排序。
然后,从排序后的n个第一根索引块中,依次读取索引记录,将其写入内存中存储的合并树的底层索引块。并且,从底层向上,分别将内存中所述合并树的各已有层索引块作为目标索引块执行第三操作,所述第三操作包括,若目标索引块达到第二阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第四索引记录;将所述第四索引记录存储至目标索引块的高一层级索引块,并清空目标索引块的内存空间。
上述第三操作与并行任务生成索引子树时的第一操作很相似,不同在于,由于索引子树被限定为具有统一高度H,第一操作执行之前对高度是否达到阈值H以及根索引块是否写满进行判断,而合并树没有高度限制,第三操作针对内存中已创建的各个已有层的索引块执行。
在n个第一根索引块中所有索引记录都写入完毕后,导出内存中存储的合并树的最高层索引块(第二根索引块)。该第二根索引块即为最终生成的索引树的总的根索引块。
图7示出在一个实施例中通过合并任务建立合并树的流程。如图7所示,并行任务1至并行任务n分别输出其生成的索引子树的第一根索引块R1,R2至Rn。在步骤71,对n个第一根索引块R1-Rn进行排序。排序过程如前所述,不复赘述。
在步骤72,从排序后的各第一索引块中依次读取一条索引记录作为当前索引记录。在将当前高度h设置为1后,进入步骤73,将当前索引记录写入当前高度h的索引块中。对于从第一索引块中读取的索引记录来说,在该步骤中,将其写入合并树的底层索引块M1。然后在步骤74,判断当前索引块大小是否达到第二阈值T2。这里的第二阈值T2与图4流程中的第一阈值T1可以相同,也可以不同,不做限制。若没有达到阈值T2,则返回步骤72,继续从第一根索引块读取下一条索引记录,写入M1。
步骤72-73反复执行,直到将某条索引记录写入底层索引块M1后,步骤74判断结果为是,M1达到了阈值T2。流程前进至步骤75,判断是否存在高一层级索引块,若不存在,则在步骤76,生成该高一层级索引块后前进至步骤77;若已存在,则直接前进至步骤77。在步骤77,将当前高度h的索引块转存到磁盘,生成对应的索引记录,即第四索引记录。
当初次执行到步骤75时,还不存在索引块M2,于是在步骤76,生成该索引块M2,然后在步骤77,将底层索引块转存到磁盘,生成一条索引记录,假定记为K1。
然后,令高度h增1,即令h=h+1,之后返回步骤73,在其中将当前索引记录写入当前高度的索引块中。此时,将转存M1得到的索引记录K1写入高一层级索引块M2,并继续对M2进行判断,如果M2也达到阈值T2,则继续执行磁盘转存,并将索引记录写入更高层级索引块的操作。
可以看到,以上流程与图4所示的生成索引子树的流程非常相似,只是图7中生成合并树的过程,不需要设置高度阈值H,也就不需要对当前高度是否达到阈值H进行判断。换而言之,合并树的高度根据各个第一根索引块中索引记录的数目,以及索引块的阈值T2而自然生成。
以上步骤72-77反复执行,直到完成n个第一根索引块中所有索引记录的写入,流程跳转至步骤78,在其中,导出合并树的最高层级索引块。
该步骤78的具体执行可以包括,从底层向上,依次将内存中合并树的除最高层之外的各已有层索引块作为目标索引块执行第四操作,所述第四操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第五索引记录;将第五索引记录存储至所述目标索引块的高一层级索引块。对于转存之后的目标索引块,可以在内存中清除为其开辟的内存空间。在从底层到次高层依次执行上述第四操作后,输出合并树的最高层索引块,即第二根索引块。
以上步骤78的执行与图6所示的索引子树的根索引块导出过程相似,相应的,上述第四操作与导出索引子树的根索引块过程中的第二操作相似。不同的是,在第二操作中,将从底层到H-1层的每层索引块(包括之前可能没有创建的索引块)依次作为目标索引块进行磁盘转存,以保证索引子树的高度为设定的H层。而第四操作中,仅将内存中已经针对合并树创建的(除最高层外的)已有层索引块作为目标索引块进行磁盘转存。这也是因为,合并树根据索引记录数量自然生成,并不对其高度预先设定。
可以理解,根据以上方式生成的合并树,相当于是在n个索引子树的基础上,继续增加高度得到的更高层级的树结构。也就是说,合并树的“叶子”层,对应于索引子树的根节点层。最终生成的索引树是由索引子树和上层的合并树共同构成的树结构。由于各个索引子树层高为固定值H,因此,最终的索引树中是一棵高度为H+H’的平衡树,其中,H’为合并树的高度。也就是说,从根节点的索引记录索引到任意数据块,都会经历H+H’层级的索引。平衡索引树对于数据的检索和查找比较有利。
在一个实施例中,针对图7所示的步骤221的执行过程进行修改,得到更为紧凑的平衡索引树。具体的,将图7中步骤72修改为,从各第一索引块中依次读取一条索引记录,根据该索引记录,沿对应索引子树读取相应的数据块索引,即第一索引记录,作为当前索引记录。后续步骤类似执行。根据该实施例,合并树的底层索引块中存储来自各个并行任务的数据块的第一索引记录,相当于对n个索引子树进行了重新整理。如此得到的合并树可以直接作为最终的索引树。可以理解,各个索引子树由于限定高度H,有些索引子树的索引块并未写满,较为稀疏。按照图7方式在索引子树基础上叠加合并树得到的平衡索引树,可能层数较高,不够紧凑。而按照上述方式重新整理得到的合并树本身就可以作为最终的平衡索引树,该平衡索引树层数可能更低,更加紧凑,更有利于数据的快速检索。
以上描述了第一种实施方式下的步骤211和步骤221,其中以等高H的索引子树作为索引指示信息,后续生成平衡索引树。
在第二种实施方式中,图2的步骤21实现为步骤212,其中直接将数据块的索引记录作为索引指示信息,而步骤22实现为步骤222,其中根据各条索引记录生成具有层级索引结构的索引树。
具体的,步骤212包括,各并行任务每生成一个数据块,根据该数据块在磁盘中的存储位置生成对应的第一索引记录,存储于内存中。内存中存储的所述多个数据块的多条第一索引记录构成索引指示信息。
与此对应的,步骤222包括,将索引指示信息中的各条第一索引记录,依次写入索引树的底层索引块;从底层向上,分别将各已有层索引块作为目标索引块执行目标操作,所述目标操作包括,若目标索引块达到预设阈值,根据目标索引块在磁盘的存储位置生成第六索引记录,将所述第六索引记录存储至所述目标索引块的高一层级索引块。响应于索引指示信息中所有索引记录写入完毕,输出内存中存储的索引树的最高层索引块作为根索引块。以上生成过程与图7所示的生成合并树的过程相似,只是图7中将索引子树根节点中的索引记录写入底层索引块,而在步骤222中,将数据块的索引记录(即第一索引记录)写入底层索引块,最终构建得到一棵平衡索引树。
相对于第一种实施方式,第二种实施方式中的步骤212和222同样可以生成一棵平衡索引树,并且生成过程更加简单。只是,在步骤212中,存储大量数据块的索引记录对内存的临时占用相对较大。
除此之外,还可以采用第三种实施方式,在其中,图2的步骤21实现为步骤213,其中各个并行任务在生成数据块之后,生成对应的索引子树作为索引指示信息,而步骤22可以实现为步骤223,其中合并任务合并n个索引子树。
具体的,步骤213包括,任意并行任务在生成所分配的多个数据块之后,根据各个数据块在磁盘中的存储位置生成对应的多条第一索引记录;根据多条第一索引记录,生成具有层级索引结构的索引子树,并导出其根索引块作为索引指示信息,其中该索引子树的底层索引块用于记录多条第一索引记录。
以上步骤213的执行过程与步骤211相似,不同之处在于,步骤213是在生成多个数据块之后,根据第一索引记录的排序生成索引子树,并且,该索引子树的高度并不进行预先设定,而是根据各个并行任务生成数据块的数量而确定。
相应的,步骤223包括,合并任务合并n个并行任务对应的n个索引子树,得到最终的索引树。步骤223的合并过程与步骤221相似,不复赘述其具体过程。
第三种实施方式同样具有内存占用少的优势,且相对于第一种实施方式更加简单,生成的索引树也更加紧凑。只是,由于步骤213中并不限定索引子树的高度,在各个并行任务处理的数据块数量显著不同时,会使得n个索引子树高度不一,最终生成的索引树不同分支深度不一,不够平衡。
以上描述了基于数据块的元数据构建索引树的多种实施方式。本领域技术人员在阅读本说明书的基础上,还可以对以上实施方式进行组合和元素替换,得到更多的实施例。在这些实施例中,通过在内存中存储索引树的根索引块,替代常规技术中在内存中常驻存储大量元数据,可以极大减小对内存的占用。
例如,在一个具体场景中,假设一个SSTbale有10万个数据块。若根据常规技术,将各个数据块的元数据常驻存储于内存,则至少需要20M的内存空间。而根据本说明书的实施例,特别是根据第一种实施方式,假定索引块大小阈值为16k,那么采用该实施例的方案后,常驻内存的元数据只有16k左右。由此可见,通过本说明书实施例中的方案,可以极大(指数级)缩减常驻内存的元数据量,极大缓解内存占用导致的瓶颈问题。
根据另一方面的实施例,与图2所示的数据存储方法相对应的,本说明书还提供一种数据存储装置,该装置可以部署在任何具有计算、处理能力的计算单元、平台、服务器、设备中。图8示出根据一个实施例的数据存储装置的结构示意图。如图8所示,该装置800包括:n个并行任务执行单元81,以及合并任务执行单元82,其中:
任意并行任务执行单元81配置为,生成多个数据块以及对应的索引指示信息,所述索引指示信息指示所述多个数据块在磁盘中存储位置的第一索引记录;
所述合并任务执行单元82配置为,基于所述n个并行任务执行单元输出的索引指示信息,建立具有层级索引结构的索引树,在内存中存储所述索引树的根索引块;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录
以上装置的各个单元,可以配置用来执行图2的方法步骤,具体执行过程的实施例可以参照之前结合图2,图4,图6和图7的描述,不复赘述。
根据其他方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行前述结合图2描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,该存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现前述结合图2描述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

Claims (9)

1.一种数据存储方法,包括:
执行n个并行任务,其中任意并行任务包括,在生成多个数据块的过程中,建立预设层数H、具有层级索引结构的子树,并导出所述子树的第一根索引块;所述多个数据块包括任意的第一数据块;所述建立预设层数H、具有层级索引结构的子树,包括:生成第一数据块,并根据所述第一数据块在磁盘中的存储位置生成第一索引记录;将所述第一索引记录写入内存中存储的所述子树的底层索引块;在所述第一根索引块未写满的情况下,从底层向上,分别将内存中所述子树的除第一根索引块的各已有层索引块作为目标索引块执行第一操作,所述第一操作包括,若目标索引块达到第一阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第二索引记录;将所述第二索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间;
执行合并任务,其中包括,基于所述n个并行任务输出的n个第一根索引块,建立合并树,至少基于所述合并树形成具有层级索引结构的索引树,所述索引树的根索引块存储于内存,其他索引块存储于磁盘;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录。
2.根据权利要求1所述的方法,其中,在执行多个并行任务之前,还包括:
按照主键值将有待存储的目标数据表划分为与所述n个并行任务对应的n个数据区间;所述多个数据块是所述任意并行任务对应的数据区间中的数据块。
3.根据权利要求1所述的方法,其中,将所述第二索引记录存储至所述目标索引块的高一层级索引块,包括:
判断内存中是否存在所述目标索引块的高一层级索引块,若不存在,创建该高一层级索引块,并将所述第二索引记录存储至该高一层级索引块中。
4.根据权利要求1所述的方法,其中,导出所述子树的第一根索引块,包括:
依次将从底层到第H-1层的各层索引块作为目标索引块执行第二操作,所述第二操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第三索引记录;将所述第三索引记录存储至所述目标索引块的高一层级索引块;
输出执行所述第二操作后的第一根索引块。
5.根据权利要求1所述的方法,其中,基于所述n个并行任务输出的n个第一根索引块,建立合并树,包括:
将所述n个第一根索引块进行排序;
从排序后的n个第一根索引块中,依次读取索引记录,将其写入内存中存储的所述合并树的底层索引块;
从底层向上,分别将内存中所述合并树的各已有层索引块作为目标索引块执行第三操作,所述第三操作包括,若目标索引块达到第二阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第四索引记录;将所述第四索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间;
响应于所述n个第一根索引块中所有索引记录写入完毕,导出内存中存储的所述合并树的最高层索引块,作为所述索引树的根索引块。
6.根据权利要求5所述的方法,其中,所述n个并行任务对应于目标数据表按照主键值划分的n个数据区间;
将所述n个第一根索引块进行排序,包括:根据n个并行任务对应的n个数据区间的主键值大小顺序,对所述n个第一根索引块进行排序。
7.根据权利要求5所述的方法,其中,导出内存中存储的所述索引总树的最高层索引块,包括:
从底层向上,依次将内存中所述合并树的除最高层之外的各已有层索引块作为目标索引块执行第四操作,所述第四操作包括,将目标索引块中的索引记录转存至磁盘,并根据转存位置生成第五索引记录;将所述第五索引记录存储至所述目标索引块的高一层级索引块;
输出执行所述第四操作后的所述合并树的最高层索引块。
8.一种数据存储装置,包括n个并行任务执行单元,以及合并任务执行单元,其中:
任意并行任务执行单元配置为,在生成多个数据块的过程中,建立预设层数H、具有层级索引结构的子树,并导出所述子树的第一根索引块;所述多个数据块包括任意的第一数据块;所述建立预设层数H、具有层级索引结构的子树,包括:生成第一数据块,并根据所述第一数据块在磁盘中的存储位置生成第一索引记录;将所述第一索引记录写入内存中存储的所述子树的底层索引块;在所述第一根索引块未写满的情况下,从底层向上,分别将内存中所述子树的除第一根索引块的各已有层索引块作为目标索引块执行第一操作,所述第一操作包括,若目标索引块达到第一阈值,将其中的索引记录转存至磁盘,并根据转存位置生成第二索引记录;将所述第二索引记录存储至所述目标索引块的高一层级索引块,并清空目标索引块的内存空间;
所述合并任务执行单元配置为,基于所述n个并行任务执行单元输出的n个第一根索引块,建立合并树,至少基于所述合并树形成层级索引结构的索引树,所述索引树的根索引块存储于内存,其他索引块存储于磁盘;其中,在所述层级索引结构中,非底层索引块中存储其低一层索引块在磁盘中存储位置的索引记录;所述索引树的底层索引块存储所述第一索引记录。
9.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-7中任一项所述的方法。
CN202211292254.6A 2022-10-21 2022-10-21 数据存储方法及装置 Active CN115374127B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211292254.6A CN115374127B (zh) 2022-10-21 2022-10-21 数据存储方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211292254.6A CN115374127B (zh) 2022-10-21 2022-10-21 数据存储方法及装置

Publications (2)

Publication Number Publication Date
CN115374127A CN115374127A (zh) 2022-11-22
CN115374127B true CN115374127B (zh) 2023-04-28

Family

ID=84074136

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211292254.6A Active CN115374127B (zh) 2022-10-21 2022-10-21 数据存储方法及装置

Country Status (1)

Country Link
CN (1) CN115374127B (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018205151A1 (zh) * 2017-05-09 2018-11-15 华为技术有限公司 数据更新方法和存储装置
US10671586B2 (en) * 2017-07-25 2020-06-02 Sap Se Optimal sort key compression and index rebuilding
CN111190903A (zh) * 2019-12-27 2020-05-22 柏科数据技术(深圳)股份有限公司 一种用于灾备客户端的btree块索引技术
CN111221776B (zh) * 2019-12-30 2023-06-23 上海交通大学 面向非易失性内存的文件系统的实现方法、系统及介质
CN114817994A (zh) * 2022-05-13 2022-07-29 支付宝(杭州)信息技术有限公司 日志结构的安全数据存储方法及装置

Also Published As

Publication number Publication date
CN115374127A (zh) 2022-11-22

Similar Documents

Publication Publication Date Title
US11899641B2 (en) Trie-based indices for databases
US10642515B2 (en) Data storage method, electronic device, and computer non-volatile storage medium
US7523288B2 (en) Dynamic fragment mapping
US8099421B2 (en) File system, and method for storing and searching for file by the same
US7933938B2 (en) File storage system, file storing method and file searching method therein
EA007209B1 (ru) Способ управления ключами в базе данных, база данных и способ организации базы данных
JPH0844537A (ja) コンピュータシステムにおいてデータをソートし格納するための方法およびデータ記憶媒体
JP2005267600A5 (zh)
US20200349038A1 (en) Storage management method, electronic device, and computer program product
CN110888837B (zh) 对象存储小文件归并方法及装置
CN112988909B (zh) 区块链数据存储方法及装置、电子设备
JPH08129551A (ja) ハッシュ方式
CN113468080A (zh) 一种全闪元数据的缓存方法、系统及相关装置
CN115374127B (zh) 数据存储方法及装置
CN112988910B (zh) 区块链数据存储方法及装置、电子设备
CN114489481A (zh) 硬盘存储数据并访问的方法及系统
CN114416646A (zh) 一种层级存储系统的数据处理方法及装置
CN114625713A (zh) 一种存储系统中元数据管理方法、装置及存储系统
CN110209489B (zh) 一种适用于内存页结构的内存管理方法及装置
US10169250B2 (en) Method and apparatus method and apparatus for controlling access to a hash-based disk
CN111258955A (zh) 一种文件读取方法和系统、存储介质、计算机设备
US20240028228A1 (en) Tiered memory data structures and algorithms for static searching via binary search
JPS61160133A (ja) デ−タの入力管理方法
CN106777131A (zh) 一种高维空间数据的查询方法、装置及计算机可读介质
JPS62287350A (ja) インデツクス一括更新方式

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
GR01 Patent grant
GR01 Patent grant