Checkpoint #1
task #1
二分查找
[K0, V0(pre_page)] [K1, V1] .... [Kn, Vn] [next_page]
在[K1, V1] ... [Kn, Vn] 中找到第一个大于等于key值的编号i
使得, key <= Ki
那么,key就需要插到i位置,而[Ki, Vi] 一直到 [Kn, Vn] 都需要往后挪一位
叶子节点
[K0, V0(pre_page)] [K1, V1] .... [Kn, Vn] [next_page]
[K1, V1]...[Kn, Vn]是n个KV对, key存的是建立索引键的值,value存的是数据行的内容/数据行的主键值
插入情况;
[K1, V]
[K0, V0] [K1, V1] .... [Kn, Vn] [Kn+1, Vn+1] [next_page]
拆分成两个部分
[K1, V]
block1: [K0, V0(pre_page)] [K1, V1] ... [Kmid, Vmid] [next_page]
[Kmid+1, V]
block2: [K0, V0(pre_page)] [Kmid+1, Vmid+1] ... [Kn+1, Vn+1] [next_page]
内部节点
[K0, V0(pre_page)] [K1, V1] [K2, V2] [K3, V3] .... [Kn, Vn]
V0 指向的 page 的 key 都大于等于K0(-inf),小于K1
V1 指向的 page 的 key 都大于等于K1, 小于K2
Vn 指向的 page 的 key 都大于等于Kn,小于Kn+1(+inf)
插入情况:
[K0, V0]
[K0, V0] [K1, V1] ... [Kn+1, Vn+1]
拆分成两个部分
[K0, V0]
block1: [K0, V0] [K1, V1] ... [Kmid, Vmid]
[Kmid+1, V1]
block2: [Kmid+1, Vmid+1] ... [Kn+1, Vn+1]
该函数的作用是往叶子页面上添加KV对
如果页面已经满了(size是指array_这个kv对的数目,但实际上第一个kv对的value是指向上一个page_id,也就是说,存入的有效kv对的数目是max_size - 1)
size == max_size_
需要分裂(此时将所有需要存入的kv取出来,长度为cnt = max_size + 1,排好序)
if cnt % 2 == 0,创建一个新的页面,均分
调用parent page的插入函数,插入[]
if cnt % 2 != 0,创建一个新的页面,分两部分,前一个部分多一个
标签:Tree,Kn,445,Project,V1,K1,CMU15
From: https://www.cnblogs.com/PinganT/p/16760619.html