首页 > 其他分享 >【CMU15-445 Project #2】B+Tree

【CMU15-445 Project #2】B+Tree

时间:2022-10-07 20:22:31浏览次数:61  
标签:Tree Kn 445 Project V1 K1 CMU15

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

相关文章