作者:
TimeString (時弦 - 我要DJmax的pc版!)
2011-12-11 00:13:10Hi 同學,
你所提到當一個 page 裡 insert 太多個 records,
會造成 page 需 split 的狀況,而需把中間的 key 往上傳,
這個觀念是正確的。
但是我想在這邊丟個問題,
BTLeafPage 和 BTIndexPage 的 page split 的狀況有沒有一樣?
另外,如果從 implement 的角度,
要把 BTreeFile.C 裡的 insert method 給 implement 出來,
其實當你知道 BTIndexPage 有 insertKey(),
BTLeafPage 有 insertRecord() 這兩個 API,
應該就有足夠的資訊了,就算是不知道 sorted page 裡面怎麼實作。
然而,因為 btree_driver.C 會用 BTreeFile 裡的 new_scan() 來作測試,
這個函式傳了 low_key 與 high_key,
會把整個 btree 介於 low_key 與 high_key 間的 dataRid 都找出來,
所以仍需要知道 sorted page 裡 records 是由小到大排或相反。
能不能請你分享一下你的想法,為什麼會覺得是由大到小排?
另外建議一下同學,可以先把自己想法 po 出來,再提出你的疑點!
※ 引述《tempTTP1 (任劍翔)》之銘言:
: 助教,各位同學:
: 不好意思,問題有點多,目前還有一些問題還請各位能幫忙解答一下,
: 如果一個page能裝n個[key, pageNo]或[key, rid]的pair,現在有個page已經滿了,
: 要再加一個pair,那當我看到insertKey或insertRec return!=OK的時候,就要把這
: n+1個key和pageNo(或rid)都先sort再取最中間那個往上傳吧?那請問sort的時候是由
: 小排到大還是由大到小呢?我看sorted_page.C的insert裡面是大到小的樣子,但是他
: 寫得好像有點簡單,所以想確認一下。還是說insertRec或insertKey return!=OK的
: 時候其實是有寫入,只是要告訴我們他已經滿了?
: 謝謝助教,各位同學