Re: [問題] 關於作業5還有一些問題

作者: tempTTP1 (任劍翔)   2011-12-11 01:03:50
助教:
謝謝助教的解釋,這邊說一下我的想法。就上課聽到的說法是leaf page
滿的時候會split,會先把所有的record依照key排序並取最中間那個往上傳,
不過那個record還會有份copy留在leaf page裡面,接下來page再以往上傳的key
為分界,分一半的record到新的page裡面;index page的split也是相似,只不過
出中間的key之後會直接push up,不會有一份copy留著。
另外我是想說如果page已經滿了,要加的那一個pair如果不會被加進去,就只好
把原本page的所有pairs都讀出來手動用keyCompare排序,這樣才能找最中間那個
,不過現在想想好像是因為取最中間那個,所以由大到小或相反其實都沒有差了。
然後我看過sorted_page.C會覺得是由大到小是因為他是keyCompare(key1,key2,..)
<0才會做交換的動作,而keyCompare()的做法是return key1-key2,所以看起來應
該是想把大的key放到前面,不過我現在才想到且發現,slot順序是從0,-1,-2...來
存的,所以應該是由小到大排才對...,不好意思 囧。
謝謝助教
※ 引述《TimeString (時弦 - 我要DJmax的pc版!)》之銘言:
: 標題: Re: [問題] 關於作業5還有一些問題
: 時間: Sun Dec 11 00:13:10 2011
:
: Hi 同學,
:
:
: 你所提到當一個 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的
: : 時候其實是有寫入,只是要告訴我們他已經滿了?
: : 謝謝助教,各位同學
:
:
作者: TimeString (時弦 - 我要DJmax的pc版!)   2011-12-11 01:06:00
嗯! 你全部都講對了!
作者: tempTTP1 (任劍翔)   2011-12-11 01:07:00
謝謝助教~ :)

Links booklink

Contact Us: admin [ a t ] ucptt.com