Bigtable和MapReduceGFS之間的關系是什么?
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+樹。
希望對你有所幫助,有幫助記得點贊哦!可以關注下,后面持續分享架構和Java的文章,謝謝!