2011-06-21 40 views
0

最近,我一直在閱讀數據庫管理系統(Raghu Ramakrishnan和Johannes Gehrke)。它說,磁盤空間管理器負責以頁爲單位分配/釋放/讀/寫操作,以確保在一個磁頭讀/寫中最大限度地處理數據以最大限度地減少時間。現在來實現的,說的功能,編寫一個頁面到磁盤我可以做如下: -以'頁'爲單位寫入磁盤

1 - 寫n個數據字節到內存緩衝區,其中n是頁面大小

2-使用C++(ofstream)中的簡單文件I/O操作將此緩衝區寫入文件。

我的問題是,這n個字節是否會成功寫入磁盤上的一個單獨頁面,或者在使用此過程時會出現其他失真,這會阻止將緩衝區作爲單個數據頁面寫入磁盤大小等於頁面大小。萬一它不會被寫成一頁,我必須採用什麼方法?非常感謝!

回答

0

通常,數據庫系統會使用直接I/O將內存中的頁面保留到磁盤。數據庫系統可以通過直接I/O控制,估計和優化磁盤寫入,而不是由操作系統或緩衝庫緩衝。

你可以參考使用以下鏈接OS的系統調用:

  1. UNIX-Like: open(2):檢查出O_DIRECT標誌
  2. Windows: CreateFile:檢查出FILE_FLAG_WRITE_THROUGH

即使緩衝I/O庫有flush()方法,操作系統不會保證flush()被調用時,數據將保持正確的方式。