CN109522271B - 一种b+树节点的批量插入和删除方法及装置 - Google Patents
一种b+树节点的批量插入和删除方法及装置 Download PDFInfo
- Publication number
- CN109522271B CN109522271B CN201811231305.8A CN201811231305A CN109522271B CN 109522271 B CN109522271 B CN 109522271B CN 201811231305 A CN201811231305 A CN 201811231305A CN 109522271 B CN109522271 B CN 109522271B
- Authority
- CN
- China
- Prior art keywords
- tree
- key
- value
- memory
- disk
- 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
Links
- 238000012217 deletion Methods 0.000 title claims abstract description 55
- 230000037430 deletion Effects 0.000 title claims abstract description 55
- 238000003780 insertion Methods 0.000 title claims abstract description 53
- 230000037431 insertion Effects 0.000 title claims abstract description 53
- 238000000034 method Methods 0.000 title claims abstract description 48
- 230000008859 change Effects 0.000 claims description 10
- 238000000605 extraction Methods 0.000 claims description 8
- 238000012545 processing Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 241000282414 Homo sapiens Species 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
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/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种B+树节点的批量插入和删除方法及装置,该方法包括:从内存B+树节点中抽取第一key‑value,从磁盘B+树节点中抽取第二key‑value,第一key‑value为内存B+树中最小的key‑value,第二key‑value为磁盘B+树中待插入或删除的最小的key‑value,再按序将内存B+树中的key‑value组成的有序集合与磁盘B+树中第二key‑value后面的所有key‑value组成的有序集合逐个进行比较,再根据比较结果和内存B+树节点中所有key‑value的操作类型,将内存B+树与磁盘B+树合并,生成新的磁盘B+树。可见,本申请是通过从内存B+树和磁盘B+树抽取最小的节点生成新的磁盘B+树,相比较将内存元数据先落盘后再合并的方法,本方法可以提高元数据访问的读性能,避免大量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,节省内存开支。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种B+树节点的批量插入和删除方法及装置。
背景技术
随着移动互联网、社交网络、电子商务的飞速发展,人类在生产和生活中产生的数据呈现指数型增长,导致数据处理量也与日俱增,同时需要的存储容量也越来越大。
由此,在云计算时代,海量数据的存储需要文件系统的支持,并且,文件系统的元数据性能已成为影响文件访问性能的关键。B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,通常用于数据库和操作系统的文件系统中。比如NTFS、ReiserFS、NSS、XFS、JFS、ReFS以及BFS等文件系统都在使用B+树作为元数据索引。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树元素的插入方式为自底向上插入。并且,在需要进行内存和磁盘换入换出时,通常都是需要批量操作来提升元数据性能,但如果按照传统的B+树的插入和删除做法不仅会涉及大量的磁盘访问还会占用大量的内存空间。
因此,如何利用更先进的B+树节点的批量插入和删除方式取代传统的批量插入和删除方式,来避免大量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,以节省内存开支,已成为亟待解决的问题。
发明内容
为解决上述问题,本申请提供了一种B+树节点的批量插入和删除方法及装置,具体技术方案如下:
第一方面,本申请提供了一种B+树节点的批量插入和删除方法,所述方法包括:
从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,所述第一key-value为所述内存B+树中最小的key-value,所述第二key-value为所述磁盘B+树中待插入或删除的最小的key-value;
从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果;
根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。
在一种可选的实现方式中,所述从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,包括:
将所述内存B+树最左侧的叶子节点设置为其游标位置,所述游标位置的游标为0;
从所述内存B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第一key-value;
根据所述内存B+树中游标指向的key-value,查询出所述磁盘B+树中对应的key-value及其所属节点,并将所述key-value的位置设置为所述磁盘B+树的游标位置;
从所述磁盘B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第二key-value。
在一种可选的实现方式中,所述内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
在一种可选的实现方式中,所述从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果之后,还包括:
根据所述比较结果,获取所述磁盘B+树中有变化的节点和没有变化的节点;
相应的,根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树中的所有key-value合并到所述将所述磁盘B+树,生成一棵新的磁盘B+树,包括:
根据所述内存B+树中key-value与所述磁盘B+树中有变化的节点中的key-value的比较结果,以及所述内存B+树中key-value的操作类型,将所述内存B+树中的key-value依次合并到所述磁盘B+树,生成一棵新的磁盘B+树;
将所述磁盘B+树中没有变化的节点及其key-value直接作为所述生成的新的磁盘B+树的节点及其key-value。
在一种可选的实现方式中,所述根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,包括:
若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过所述当前内存B+树节点中的key-value,自左往右分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
或者,
若当前内存B+树节点中的key-value的操作类型为insert,则选择所述当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
直至所述内存B+树和所述磁盘B+树的游标均遍历结束,合并生成一棵新的磁盘B+树,并更新所述生成的新的磁盘B+树的root节点。
第二方面,本申请提供了一种B+树节点的批量插入和删除装置,所述装置包括:
抽取单元,用于从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,所述第一key-value为所述内存B+树中最小的key-value,所述第二key-value为所述磁盘B+树中待插入或删除的最小的key-value;
比较单元,用于从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果;
合并单元,用于根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。
在一种可选的实现方式中,所述抽取单元包括:
设置子单元,用于将所述内存B+树最左侧的叶子节点设置为其游标位置,所述游标位置的游标为0;
第一抽取子单元,用于从所述内存B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第一key-value;
查询子单元,用于根据所述内存B+树中游标指向的key-value,查询出所述磁盘B+树中对应的key-value及其所属节点,并将所述key-value的位置设置为所述磁盘B+树的游标位置;
第二抽取子单元,用于从所述磁盘B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第二key-value。
在一种可选的实现方式中,所述内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
在一种可选的实现方式中,所述装置还包括:
获取单元,用于根据所述比较结果,获取所述磁盘B+树中有变化的节点和没有变化的节点
相应的,所述合并单元包括:
第一合并子单元,用于根据所述内存B+树中key-value与所述磁盘B+树中有变化的节点中的key-value的比较结果,以及所述内存B+树中key-value的操作类型,将所述内存B+树中的key-value依次合并到所述磁盘B+树,生成一棵新的磁盘B+树;
第一合并子单元,用于将所述磁盘B+树中没有变化的节点及其key-value直接作为所述生成的新的磁盘B+树的节点及其key-value。
在一种可选的实现方式中,所述合并单元包括:
跳过子单元,用于若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过所述当前内存B+树节点中的key-value,自左往右分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
或者,
选择子单元,用于若当前内存B+树节点中的key-value的操作类型为insert,则选择所述当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
第三合并子单元,用于直至所述内存B+树和所述磁盘B+树的游标均遍历结束,合并生成一棵新的磁盘B+树,并更新所述生成的新的磁盘B+树的root节点。
在本申请提供的B+树节点的批量插入和删除方法中,首先,从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,其中,第一key-value为内存B+树中最小的key-value,第二key-value为磁盘B+树中待插入或删除的最小的key-value,然后,再从第一key-value和第二key-value所在位置,按序将内存B+树中所有的key-value组成的有序集合与磁盘B+树中第二key-value后面的所有key-value组成的有序集合逐个进行比较,得到比较结果,进而,可以根据比较结果,以及内存B+树节点中所有key-value的操作类型,将内存B+树与磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。可见,本申请通过从内存的B+树和磁盘上的B+树抽取最小的节点生成新的磁盘B+树,而不是用传统的方法在原有的B+树上进行插入和删除。使得内存B+树与磁盘B+树可以直接进行合并,相比较现有的将内存元数据先落盘后再合并的方法,本方法可以提高元数据访问的读性能,并能够避免大量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,节省内存开支。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种B+树节点的批量插入和删除方法的流程示意图;
图2为本申请实施例提供的抽取第一key-value和第二key-value的流程图;
图3为本申请实施例提供的查询磁盘B+树中有变化的节点的示意图;
图4为本申请实施例提供的自底向上生成新的磁盘B+树的示意图;
图5为本申请实施例提供的一种B+树节点的批量插入和删除装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解本申请提供的技术方案,下面先对本申请技术方案的研究背景进行简单说明。
众所周知,正如背景技术中的描述,随着网络技术的发展,数据处理量与日俱增的同时,海量数据的存储也需要文件系统的支持,其中,文件系统的元数据性能是影响文件访问性能的关键。B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,通常用于数据库和操作系统的文件系统中。比如NTFS、ReiserFS、NSS、XFS、JFS、ReFS以及BFS等文件系统均是以B+树作为元数据索引。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+树元素的插入方式为自底向上插入。并且,在需要进行内存和磁盘换入换出时,通常都是需要批量操作来提升元数据性能,但如果按照传统的B+树的插入和删除做法不仅会涉及大量的磁盘访问还会占用大量的内存空间。由此,如何利用更先进的B+树节点的批量插入和删除方式取代传统的批量插入和删除方式,来避免批量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,以节省内存开支,已成为亟待解决的问题。
基于此,本申请提出了一种B+树节点的批量插入和删除方法及装置,用于在实现B+树节点的批量插入和删除的同时,避免批量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,以节省内存开支。
以下将结合附图对本申请实施例提供的B+树节点的批量插入和删除方法进行详细说明。参见图1,其示出了本申请实施例提供的一种B+树节点的批量插入和删除方法的流程图,本实施例可以包括以下步骤:
S101:从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,其中,第一key-value为内存B+树中最小的key-value,第二key-value为磁盘B+树中待插入或删除的最小的key-value。
在本实施例中,为了能够在实现B+树节点的批量插入和删除的同时,避免批量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,以节省内存开支,不再逐个将key-value先读到内存在写到磁盘中,由于内存的存储空间较小,而磁盘的存储空间较大,进而首先可以将内存中的B+树和磁盘上的B+树当作待合并的两个源,然后,每次从这两个源中获取一个最小的节点,即,从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,其中,第一key-value为内存B+树中最小的key-value,第二key-value为磁盘B+树中待插入或删除的最小的key-value。
在本申请一些可能的实现方式中,步骤S101具体可以包括步骤S201-S204:
S201:将内存B+树最左侧的叶子节点设置为其游标位置,该游标位置的游标为0。
在本实现方式中,内存B+树的各个节点中存放了多个条目entry,比如,每个节点中可以包含512个entry,且每个entry对应了一个键值对key-value,所以,内存B+树中包含了多个key-value,比如,每个节点中可以包含512个key-value。
进而,可以将内存B+树最左侧的叶子节点设置为其游标位置,并将该游标值为0。
S202:从内存B+树中游标对应的节点中抽取出该节点中最小的key-value,作为第一key-value。
在本实现方式中,通过步骤S201将内存B+树最左侧的叶子节点设置为其游标为0的位置后,由于B+树中的数据是按从小到大的顺序从左到右排列,所以,可以从内存B+树中游标位置对应的节点(最左侧的叶子节点)中抽取出该节点中最小的key-value,即最左侧的key-value,并将其作为第一key-value。
S203:根据内存B+树中游标指向的key-value,查询出磁盘B+树中对应的key-value及其所属节点,并将该key-value的位置设置为磁盘B+树的游标位置。
在本实现方式中,通过步骤S202抽取出内存B+树中最小的key-value(即第一key-value)后,进一步可以根据该内存B+树中游标位置指向的key-value(即第一key-value),查询出磁盘B+树中对应的key-value及其所属节点。
具体来讲,可以根据第一key-value的值,在磁盘B+树中查询出与第一key-value的值相同的key-value,若磁盘B+树中不包含与第一key-value的值相同的key-value,则可以查询出与第一key-value的值相近的key-value,比如,若第一key-value的值为46,则可以在磁盘B+树中查询出key-value的值为46的key-value作为磁盘B+树的游标位置,若查询出磁盘B+树中不包含值为46的key-value,则可以将值为45、47等与46相近的key-value作为磁盘B+树的游标位置。
需要说明的是,磁盘B+树的各个节点中也可以存放多个条目entry,比如,每个节点中也可以包含512个entry,且每个entry对应了一个键值对key-value,所以,磁盘B+树中也包含了多个key-value,比如,每个节点中可以包含512个key-value。
S204:从磁盘B+树中游标对应的节点中抽取出该节点中最小的key-value,作为第二key-value。
在本实现方式中,通过步骤S203,根据内存B+树中游标指向的key-value,查询出磁盘B+树中游标位置后,由于磁盘B+树中的节点数据也是按从小到大的顺序从左到右排列,所以,可以将磁盘B+树中游标位置以左(不包括游标位置对应的节点)的各个节点保留,不对其进行插入和删除等操作,直接将这些节点作为内存B+树和磁盘B+树合并后新生成的磁盘B+树的左侧节点。相对应的,可以从磁盘B+树中游标位置对应的节点中抽取出该节点中待插入或删除的、最小的key-value,并将其作为第二key-value。
S102:从第一key-value和第二key-value所在位置,按序将内存B+树中所有的key-value组成的有序集合与磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果。
在本实施例中,通过步骤S101,从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value后,进一步可以从第一key-value和第二key-value所在位置,按序(从左往右、自底向上)将内存B+树中所有的key-value组成的有序集合与磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果。
S103:根据该比较结果,以及内存B+树节点中所有key-value的操作类型,将内存B+树与磁盘B+树进行合并,生成一颗新的磁盘B+树,以实现B+树节点的批量插入和删除。
在本实施例中,通过步骤S102,从第一key-value和第二key-value所在位置,按从左往右、自底向上的顺序将内存B+树中所有的key-value与磁盘B+树中待插入或删除的key-value进行比较,得到比较结果后,进一步可以根据该比较结果,以及内存B+树节点中对应的key-value的操作类型,将内存B+树中的所有key-value与磁盘B+树进行合并,生成一颗新的磁盘B+树,以实现B+树节点的批量插入和删除,可见,将内存B+树和磁盘B+树合并后生成的新的磁盘B+树保存的是唯一的key-value信息,进而可以提高查询效率。
在本申请一些可能的实现方式中,本步骤S103中,内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
其中,abort类型指的是当存在了insert类型的key-value对时,又进行了delete操作,就会将该key-value对标记成abort。
并且,内存中的B+树相当于一个增量,其中每个节点记录自己的操作类型,是插入还是删除,如果是插入就需要更新对应磁盘B+树中的key-value的值,如果是删除,就需要将磁盘上B+树的相应信息删除
在本申请一些可能的实现方式中,通过上述步骤S102,可以获取到磁盘B+树中有变化的节点和没有变化的节点。
其中,磁盘B+树中有变化的节点指的是对应父节点的key-value大于内存中B+树当前游标所指向的key-value的节点,反之则为没有变化的节点。如图3所示,其示出了本申请实施例提供的查询磁盘B+树中有变化的节点的示意图。从图3可以看出,如果某一父节点下面的叶子节点都没有变化,且如果该父节点向上还有父节点则继续向上检查,直到找到有变化的节点。
相应的,步骤S103的具体实现过程可以包括下述步骤A-B:
步骤A:根据内存B+树中key-value与磁盘B+树中有变化的节点中的key-value的比较结果,以及内存B+树中key-value的操作类型,将内存B+树中的key-value依次合并到磁盘B+树,生成一棵新的磁盘B+树。
步骤B:将磁盘B+树中没有变化的节点及其key-value直接作为生成的新的磁盘B+树的节点及其key-value。
具体来讲,可以将磁盘B+树中没有变化的节点及其key-value保留,不对其进行插入和删除等操作,直接将这些节点及作为内存B+树和磁盘B+树合并后新生成的磁盘B+树的中节点,即,可以直接将这些节点插入新生成的磁盘B+树中。
在本申请一些可能的实现方式中,在步骤S103中,若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过当前内存B+树节点中的key-value,自左向右分别移动内存B+树节点中的游标和磁盘B+树节点中的游标,进行内存B+树节点中下一个key-value和磁盘B+树节点中下一个key-value的比较。
或者,若当前内存B+树节点中的key-value的操作类型为insert,则选择当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动内存B+树节点中的游标和磁盘B+树节点中的游标,进行内存B+树节点中下一个key-value和磁盘B+树节点中下一个key-value的比较。
进一步的,如果在比较过程中,需要在磁盘B+树中向上生成相应的父节点,则首先将子节点刷盘(即将内存B+树中相应的key-value写入到磁盘B+树中对应的节点上),并且,生成的父节点中对应包含了子节点在磁盘的物理地址(即在磁盘中的逻辑顺序地址),比如该磁盘容量可以为1G,则每个子节点在磁盘中的物理地址可以是0至1G中的某一顺序地址。
再进一步的,在判断完内存B+树中某一子节点中的key-value后,可以释放子节点内存,再判断父节点是否需要向上生成相应的父节点,以此类型,直至内存B+树和磁盘B+树的游标均遍历结束,也就是磁盘B+树上的节点合并完成后,合并生成一棵新的磁盘B+树,并更新该新的磁盘B+树的root节点,如图4所示,其示出了本申请实施例提供的自底向上生成新的磁盘B+树的示意图。其中,非树根节点n满足以下公式:
其中,m表示每个节点中包含的条目数量,比如m可以取为512,节点值可以取为511等。
这样,在本申请提供B+树节点的批量插入和删除方法中,首先,从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,其中,第一key-value为内存B+树中最小的key-value,第二key-value为磁盘B+树中待插入或删除的最小的key-value,然后,再从第一key-value和第二key-value所在位置,按序将内存B+树中所有的key-value组成的有序集合与磁盘B+树中第二key-value后面的所有key-value组成的有序集合逐个进行比较,得到比较结果,进而,可以根据比较结果,以及内存B+树节点中所有key-value的操作类型,将内存B+树与磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。可见,本申请通过从内存的B+树和磁盘上的B+树抽取最小的节点生成新的磁盘B+树,而不是用传统的方法在原有的B+树上进行插入和删除。使得内存B+树与磁盘B+树可以直接进行合并,相比较现有的将内存元数据先落盘后再合并的方法,本方法可以提高元数据访问的读性能,并能够避免大量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,节省内存开支。
为便于理解,现对本申请实施例的整体实现过程分步骤进行详细介绍如下:
(1)设置内存B+树的节点游标为最左侧叶子节点,设置key-value对游标为0;
(2)根据内存B+树的游标指向的key去磁盘B+树查找对应的叶子节点,设置磁盘B+树的游标;
(3)设置磁盘B+树游标过程中将磁盘B+树中没有变化的节点插入新生成的磁盘B+树;
(4)从内存B+树的游标位置取最小的key-value;
(5)从磁盘B+树游标位置取最小的key-value。
(6)根据内存B+树、磁盘B+树的key,内存B+树中key的操作类型(insert、delete、abort)比较并选择或者跳过key-value;
(7)如果跳过key-value移动相应的内存B+树和磁盘B+树的游标;
(8)如果选择了key-value,则先进行key-value的合并,再移动相应的游标;
(9)如果内存B+树游标移动后超出该节点,则更新游标节点为本节点下一个,如果已经达到尾部则设置为null;
(10)如果磁盘B+树游标移动后超出该节点,则将下一个节点从磁盘读出;
(11)从磁盘读磁盘B+树结点时仅读有变化的节点,没有变化的节点直接插入新生成的磁盘B+树中;
(12)判断磁盘B+树中父节点下面的叶子节点是否有变化的依据是该父节点的key大于内存B+树的当前游标所指向的key;
(13)如果该父节点下面的叶子节点都没有变化,且如果该父节点还有向上的父节点,则继续向上检查,直到找到有变化的节点;
(14)新生成的磁盘B+树中插入节点后,可根据规则判断是否需要向上生成相应的父节点;
(15)如果需要向上生成相应的父节点,则首先将子节点刷盘。
(16)生成父节点,父节点包含子节点在磁盘的物理地址;
(17)释放子节点内存,再判断父节点是否需要向上生成相应的父节点;
(18)重复上述步骤,直至内存B+树和磁盘B+树的游标都遍历结束。
(19)更新磁盘上B+树的root节点。
需要说明的是,上述步骤(1)-(19)的具体实现过程参见步骤S101~步骤S103。
基于以上B+树节点的批量插入和删除方法,本申请还提供了一种B+树节点的批量插入和删除装置,所述装置包括:
抽取单元501,用于从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,所述第一key-value为所述内存B+树中最小的key-value,所述第二key-value为所述磁盘B+树中待插入或删除的最小的key-value;
比较单元502,用于从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后的所有待插入或删除的key-value进行比较,得到比较结果;
合并单元503,用于根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。
可选地,所述抽取单元501包括:
设置子单元,用于将所述内存B+树最左侧的叶子节点设置为其游标位置,所述游标位置的游标为0;
第一抽取子单元,用于从所述内存B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第一key-value;
查询子单元,用于根据所述内存B+树中游标指向的key-value,查询出所述磁盘B+树中对应的key-value及其所属节点,并将所述key-value的位置设置为所述磁盘B+树的游标位置;
第二抽取子单元,用于从所述磁盘B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第二key-value。
可选地,所述内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
可选地,所述装置还包括:
获取单元,用于根据所述比较结果,获取所述磁盘B+树中有变化的节点和没有变化的节点
相应的,所述合并单元503包括:
第一合并子单元,用于根据所述内存B+树中key-value与所述磁盘B+树中有变化的节点中的key-value的比较结果,以及所述内存B+树中key-value的操作类型,将所述内存B+树中的key-value依次合并到所述磁盘B+树,生成一棵新的磁盘B+树;
第一合并子单元,用于将所述磁盘B+树中没有变化的节点及其key-value直接作为所述生成的新的磁盘B+树的节点及其key-value。
可选地,所述合并单元503包括:
跳过子单元,用于若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过所述当前内存B+树节点中的key-value,自左往右分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
或者,
选择子单元,用于若当前内存B+树节点中的key-value的操作类型为insert,则选择所述当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
第三合并子单元,用于直至所述内存B+树和所述磁盘B+树的游标均遍历结束,合并生成一棵新的磁盘B+树,并更新所述生成的新的磁盘B+树的root节点。
这样,在本申请提供的B+树节点的批量插入和删除装置中,首先,从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,其中,第一key-value为内存B+树中最小的key-value,第二key-value为磁盘B+树中待插入或删除的最小的key-value,然后,再从第一key-value和第二key-value所在位置,按序将内存B+树中所有的key-value组成的有序集合与磁盘B+树中第二key-value后面的所有key-value组成的有序集合逐个进行比较,得到比较结果,进而,可以根据比较结果,以及内存B+树节点中所有key-value的操作类型,将内存B+树与磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。可见,本申请通过从内存的B+树和磁盘上的B+树抽取最小的节点生成新的磁盘B+树,而不是用传统的方法在原有的B+树上进行插入和删除。使得内存B+树与磁盘B+树可以直接进行合并,相比较现有的将内存元数据先落盘后再合并的方法,本方法可以提高元数据访问的读性能,并能够避免大量插入和删除节点带来的大量读磁盘操作和删除结点时频繁的变换,节省内存开支。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种B+树节点的批量插入和删除方法,其特征在于,所述方法包括:
从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,所述第一key-value为所述内存B+树中最小的key-value,所述第二key-value为所述磁盘B+树中待插入或删除的最小的key-value;
从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果;
根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。
2.根据权利要求1所述的B+树节点的批量插入和删除方法,其特征在于,所述从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,包括:
将所述内存B+树最左侧的叶子节点设置为其游标位置,所述游标位置的游标为0;
从所述内存B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第一key-value;
根据所述内存B+树中游标指向的key-value,查询出所述磁盘B+树中对应的key-value及其所属节点,并将所述key-value的位置设置为所述磁盘B+树的游标位置;
从所述磁盘B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第二key-value。
3.根据权利要求1所述的B+树节点的批量插入和删除方法,其特征在于,所述内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
4.根据权利要求1所述的B+树节点的批量插入和删除方法,其特征在于,所述从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后面的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果之后,还包括:
根据所述比较结果,获取所述磁盘B+树中有变化的节点和没有变化的节点;
相应的,根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树中的所有key-value合并到所述将所述磁盘B+树,生成一棵新的磁盘B+树,包括:
根据所述内存B+树中key-value与所述磁盘B+树中有变化的节点中的key-value的比较结果,以及所述内存B+树中key-value的操作类型,将所述内存B+树中的key-value依次合并到所述磁盘B+树,生成一棵新的磁盘B+树;
将所述磁盘B+树中没有变化的节点及其key-value直接作为所述生成的新的磁盘B+树的节点及其key-value。
5.根据权利要求3所述的B+树节点的批量插入和删除方法,其特征在于,所述根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,包括:
若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过所述当前内存B+树节点中的key-value,自左往右分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
或者,
若当前内存B+树节点中的key-value的操作类型为insert,则选择所述当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
直至所述内存B+树和所述磁盘B+树的游标均遍历结束,合并生成一棵新的磁盘B+树,并更新所述生成的新的磁盘B+树的root节点。
6.一种B+树节点的批量插入和删除装置,其特征在于,所述装置包括:
抽取单元,用于从内存B+树节点中抽取第一key-value,以及从磁盘B+树节点中抽取第二key-value,所述第一key-value为所述内存B+树中最小的key-value,所述第二key-value为所述磁盘B+树中待插入或删除的最小的key-value;
比较单元,用于从所述第一key-value和所述第二key-value所在位置,按序将所述内存B+树中所有的key-value组成的有序集合与所述磁盘B+树中第二key-value后的所有待插入或删除的key-value组成的有序集合逐个进行比较,得到比较结果;
合并单元,用于根据所述比较结果,以及所述内存B+树节点中所有key-value的操作类型,将所述内存B+树与所述磁盘B+树进行合并,生成一棵新的磁盘B+树,以实现B+树节点的批量插入和删除。
7.根据权利要求6所述的装置,其特征在于,所述抽取单元包括:
设置子单元,用于将所述内存B+树最左侧的叶子节点设置为其游标位置,所述游标位置的游标为0;
第一抽取子单元,用于从所述内存B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第一key-value;
查询子单元,用于根据所述内存B+树中游标指向的key-value,查询出所述磁盘B+树中对应的key-value及其所属节点,并将所述key-value的位置设置为所述磁盘B+树的游标位置;
第二抽取子单元,用于从所述磁盘B+树中游标对应的节点中抽取出所述节点中最小的key-value,作为所述第二key-value。
8.根据权利要求6所述的装置,其特征在于,所述内存B+树节点中key-value的操作类型为插入insert、删除delete以及撤销abort中的一种。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
获取单元,用于根据所述比较结果,获取所述磁盘B+树中有变化的节点和没有变化的节点
相应的,所述合并单元包括:
第一合并子单元,用于根据所述内存B+树中key-value与所述磁盘B+树中有变化的节点中的key-value的比较结果,以及所述内存B+树中key-value的操作类型,将所述内存B+树中的key-value依次合并到所述磁盘B+树,生成一棵新的磁盘B+树;
第一合并子单元,用于将所述磁盘B+树中没有变化的节点及其key-value直接作为所述生成的新的磁盘B+树的节点及其key-value。
10.根据权利要求8所述的装置,其特征在于,所述合并单元包括:
跳过子单元,用于若当前内存B+树节点中key-value的操作类型为delete或abort,则跳过所述当前内存B+树节点中的key-value,自左往右分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
或者,
选择子单元,用于若当前内存B+树节点中的key-value的操作类型为insert,则选择所述当前内存B+树节点中的key-value,并将其插入新的节点中,再自底向上分别移动所述内存B+树节点中的游标和所述磁盘B+树节点中的游标,进行所述内存B+树节点中下一个key-value和所述磁盘B+树节点中下一个key-value的比较;
第三合并子单元,用于直至所述内存B+树和所述磁盘B+树的游标均遍历结束,合并生成一棵新的磁盘B+树,并更新所述生成的新的磁盘B+树的root节点。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811231305.8A CN109522271B (zh) | 2018-10-22 | 2018-10-22 | 一种b+树节点的批量插入和删除方法及装置 |
PCT/CN2018/124696 WO2020082597A1 (zh) | 2018-10-22 | 2018-12-28 | 一种b+树节点的批量插入和删除方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811231305.8A CN109522271B (zh) | 2018-10-22 | 2018-10-22 | 一种b+树节点的批量插入和删除方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109522271A CN109522271A (zh) | 2019-03-26 |
CN109522271B true CN109522271B (zh) | 2021-05-18 |
Family
ID=65772444
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811231305.8A Active CN109522271B (zh) | 2018-10-22 | 2018-10-22 | 一种b+树节点的批量插入和删除方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN109522271B (zh) |
WO (1) | WO2020082597A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502457B (zh) * | 2019-08-23 | 2022-02-18 | 北京浪潮数据技术有限公司 | 一种元数据存储方法及装置 |
CN110569396B (zh) * | 2019-09-03 | 2022-05-06 | 上海赜睿信息科技有限公司 | 一种数据搜索方法、电子设备和计算机可读存储介质 |
CN111400249A (zh) * | 2020-03-06 | 2020-07-10 | 深圳市瑞驰信息技术有限公司 | 一种易于统计文件数量的文件存储系统及存储方法 |
CN113377364B (zh) * | 2021-04-29 | 2022-10-11 | 上海工程技术大学 | 基于节点历史值的树形结构组织编辑操作回撤方法 |
CN113204681B (zh) * | 2021-05-07 | 2024-09-10 | 北京柠檬微趣科技股份有限公司 | 数据排序方法、装置、设备、存储介质及程序产品 |
CN113901276B (zh) * | 2021-09-30 | 2024-07-09 | 苏州浪潮智能科技有限公司 | 一种数据管理、b+树加载方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609490A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种面向列存储dwms的b+树索引方法 |
WO2012149100A2 (en) * | 2011-04-27 | 2012-11-01 | Verisign, Inc. | Systems and methods for a cache-sensitive index using partial keys |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
-
2018
- 2018-10-22 CN CN201811231305.8A patent/CN109522271B/zh active Active
- 2018-12-28 WO PCT/CN2018/124696 patent/WO2020082597A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012149100A2 (en) * | 2011-04-27 | 2012-11-01 | Verisign, Inc. | Systems and methods for a cache-sensitive index using partial keys |
CN102609490A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种面向列存储dwms的b+树索引方法 |
CN104331497A (zh) * | 2014-11-19 | 2015-02-04 | 中国科学院自动化研究所 | 一种利用向量指令并行处理文件索引的方法及装置 |
Non-Patent Citations (1)
Title |
---|
数据流实时存储关键技术;陈彬;《中国优秀硕士学位论文全文数据库(电子期刊) 信息科技辑》;20160430;第18-30页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109522271A (zh) | 2019-03-26 |
WO2020082597A1 (zh) | 2020-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109522271B (zh) | 一种b+树节点的批量插入和删除方法及装置 | |
US10102253B2 (en) | Minimizing index maintenance costs for database storage regions using hybrid zone maps and indices | |
CN100458779C (zh) | 扩展索引的方法 | |
US8527556B2 (en) | Systems and methods to update a content store associated with a search index | |
CN109408589B (zh) | 数据同步方法及装置 | |
CN109471838B (zh) | 目录文档的操作方法、装置、电子设备、可读存储介质 | |
JP2005302038A (ja) | Bツリー中の連続キーの名前を変更する方法およびシステム | |
CN104598517A (zh) | 基于普通数据库的树型结构表的存储与查询技术 | |
US20170228468A1 (en) | Data searching method of database, apparatus and computer program for the same | |
US8996501B2 (en) | Optimally ranked nearest neighbor fuzzy full text search | |
CN114356878A (zh) | 一种非结构化数据分布式存储方法及装置 | |
CN113468080B (zh) | 一种全闪元数据的缓存方法、系统及相关装置 | |
CN111104377A (zh) | 文件管理的方法、电子设备和计算机可读存储介质 | |
CN113779286B (zh) | 管理图数据的方法及装置 | |
CN111984649A (zh) | 数据索引的查找方法、装置和相关设备 | |
CN114840487A (zh) | 分布式文件系统的元数据管理方法和装置 | |
CN105843809B (zh) | 数据处理方法和装置 | |
KR102354343B1 (ko) | 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치 | |
CN105025013A (zh) | 基于优先级Trie树的动态IP匹配模型 | |
KR101693108B1 (ko) | 읽기 성능 개선을 위한 티-트리 인덱스를 이용한 데이터베이스 읽기 방법 및 그 장치 | |
CN109299106B (zh) | 数据查询方法和装置 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
US11481372B1 (en) | Systems and methods for indexing multi-versioned data | |
CN113821508B (zh) | 一种数组索引的实现方法和系统 | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 |
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 |