Bigtable和MapReduceGFS之間的關(guān)系是什么?
GFS、Bigtable、MapReduce的關(guān)系
GFS(Google File System)使Google的分布式文件系統(tǒng),Bigtable也是構(gòu)建在GFS之上的,MapReduce也需要利用GFS作為數(shù)據(jù)的輸入和輸出。
Bigtable是什么Bigtable是分布式表格系統(tǒng),表格由很多行組成,每行通過一個rowkey唯一標識,每行包含很多列,多個列組成列族。列族是訪問控制的基本單元。Bigtable構(gòu)建在GFS之上,并且依賴于Goole的Chubby進行服務(wù)器的選舉和全局信息的維護。
讀寫當有客戶端向 發(fā)送寫操作時,它會先向 tablet log追加一條記錄,在日志成功追加之后再向 memtable 中插入該條記錄,寫比較方便。
當有客戶端進行讀操作時,會在 memtable 和 SSTable 上進行合并查找。讀就比較復(fù)雜了,還需要確認數(shù)據(jù)在哪里,當然這里會使用很多優(yōu)化的方法,比如緩存數(shù)據(jù),使用Bloom lters快速確認數(shù)據(jù)是不是存在一個SSTable里。
memtable和SSTable中的數(shù)據(jù)都是有序的,SSTable是由memtable生成的,當memtable達到一定量時,就會被凍結(jié),新的memtable就會被生成,被凍結(jié)的memtable就會轉(zhuǎn)化成SSTable,并寫入到GFS上。
LevelDB 是對Bigtable 論文中描述的鍵值存儲系統(tǒng)的實現(xiàn),并且由 Bigtable 的作者 Jeff Dean 和 Sanjay Ghemawat 共同完成,可以參考下LevelDB的實現(xiàn)。
總結(jié)了解Bigtable,需要了解下LSM樹,現(xiàn)在的數(shù)據(jù)存儲引擎一般就是哈希、B樹、LSM樹。像我們使用的mysql的InnoDB存儲引擎就是B+樹。
希望對你有所幫助,有幫助記得點贊哦!可以關(guān)注下,后面持續(xù)分享架構(gòu)和Java的文章,謝謝!