Re: [問題] findRunStart()

作者: TimeString (時弦 - 我要DJmax的pc版!)   2011-12-11 00:40:28
Hi 同學,
findRunStart 簡單的講就是找某一個 key,
它是在哪一個 (BTLeaf) page 裡,且 page 裡的哪一個 RID 可以找到這個 key。
所以 findRunStart 所傳入參數,
第一個 lo_key 為 input,代表你要找的 key;
第二個 pppage 可視為 output (所以這就是為什麼他宣告成指標的型態),
回傳 key 所在的 page 在哪;
第三個 pstartrid 可視為 output,回傳所屬的 RID。
在整個 btree 中,findRunStart 是這樣被使用的:
我們想要找 btree 裡的某一段 data,
所以會有 low key 與 high key 來 bound 住我們要搜尋的範圍。
new_scan() 是一個使用 findRunStart() 的最典型例子,
new_scan() 傳入 lo_key 及 hi_key,
而使用 findRunStart() 來尋找 lo_key 在 btree 裡的哪一個 page 及 RID,
這也是為什麼 findRunStart() 第一個參數特別命名為 "lo_key" 而不是 "key"。
且為什麼這個函式叫作 findRun"Start"。
但這時或許大家馬上就想到,為什麼我們不用找 hi_key 在哪個 page 及 RID?
因為 b+ tree 的最後一層是 linked list!!
感謝同學的提問!
※ 引述《superbdale (哈哈)》之銘言:
: 助教你好
: 作業裡面有一個function叫findRunStart()
: 那邊有一些TODO,但是pdf和powerpoint寫得不是很清楚
: 可以再說明一下嗎?
: 謝謝!
作者: superbdale (哈哈)   2011-12-11 08:51:00
謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com