關於B+樹的一個問題


在實現B+樹的時候遇到一個問題.
我的B+樹節點是這樣設計的:
+---+---+---+-...-+---+
|key|key|key| ... |key|
+---+---+---+-...-+---+
|ptr|ptr|ptr| ... |ptr|
+---+---+---+-...-+---+
另外有兩個域標志slibing和parent分別標識該節點的兄弟和父親節點.
實現B+樹的節點分裂方法時,不知道該從樹根到葉子分裂(從上到下)還是從葉子到樹根分裂(從下到上).我選擇的是從下到上分裂.分裂時使用一個棧,從要分裂的葉子節點開始,通過察看parent域,如果該節點的父節點也要分裂則把該節點壓棧,直到該節點的某個祖先不必分裂時,再從棧中取節點,向下分裂.由於引入了一個parent域,在分裂時一旦將key-ptr對移入新節點,則必須讀盤,修改分裂節點子節點的parent域,然后再寫入修改后的子節點,這樣讀盤次數增加了好多.
請問有沒有什么解決辦法降低讀盤次數,或者說我實現split方法的策略就有問題.還請高人不吝賜教.謝過先!

5 个解决方案

#1


mark

#2


諸位,對錯都沒關系,大家一起聊一聊,有什么想法都行,小生急着用.分數少還能在追加...再次感謝.

#3


up

#4


預先讀入一部分到內存。

#5


樓上那位大哥,能不能說的清除點呢?怎么預讀入內存?另外開辟一塊緩沖區嗎?

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com