回覆列表
  • 1 # 淺析架構

    GFS、Bigtable、MapReduce的關係

    GFS(Google File System)使Google的分散式檔案系統,Bigtable也是構建在GFS之上的,MapReduce也需要利用GFS作為資料的輸入和輸出。

    Bigtable是什麼

    Bigtable是分散式表格系統,表格由很多行組成,每行透過一個rowkey唯一標識,每行包含很多列,多個列組成列族。列族是訪問控制的基本單元。Bigtable構建在GFS之上,並且依賴於Goole的Chubby進行伺服器的選舉和全域性資訊的維護。

    讀寫

    當有客戶端向 傳送寫操作時,它會先向 tablet log追加一條記錄,在日誌成功追加之後再向 memtable 中插入該條記錄,寫比較方便。

    當有客戶端進行讀操作時,會在 memtable 和 SSTable 上進行合併查詢。讀就比較複雜了,還需要確認資料在哪裡,當然這裡會使用很多最佳化的方法,比如快取資料,使用Bloom lters快速確認資料是不是存在一個SSTable裡。

    memtable和SSTable中的資料都是有序的,SSTable是由memtable生成的,當memtable達到一定量時,就會被凍結,新的memtable就會被生成,被凍結的memtable就會轉化成SSTable,並寫入到GFS上。

    LevelDB 是對Bigtable 論文中描述的鍵值儲存系統的實現,並且由 Bigtable 的作者 Jeff Dean 和 Sanjay Ghemawat 共同完成,可以參考下LevelDB的實現。

    總結

    瞭解Bigtable,需要了解下LSM樹,現在的資料儲存引擎一般就是雜湊、B樹、LSM樹。像我們使用的mysql的InnoDB儲存引擎就是B+樹。

  • 中秋節和大豐收的關聯?
  • 說文解字:把饅頭片放在暖氣片上tēng一下,這個tēng是啥意思?