一.BigTable算法
1.bigtable能夠動態控制數據分佈和格式,他提供了簡單的數據模型。數據庫
2.bigtable使用了不少數據庫策略,並行數據庫和內存數據庫,他的不一樣時能夠動態控制數據分佈式和存儲。緩存
3.用戶能夠把結構或半結構化的數據串行化,選擇相關的數據模式,控制數據位置相關性,經過參數控制保存到內存或硬盤中。服務器
4.bigtable的結構像一個立體空間結構。key(行,列,時間)。按行分區,每一個區就是一個tablet,數據分佈和均衡的最小單位。列族通常最多幾百個,每一個列族有不少個列關鍵字,而時間是列的版本。網絡
5.時間戳信息是列的版本信息,有時是一個網絡爬蟲爬到的時間戳信息。oracle
6.能夠和MapReduce結合使用,MapReduce是個並行框架,可使bigtable做爲它的數據輸入輸出。框架
二.BigTable構件分佈式
1.bigtable使用GFS存儲日誌和數據文件。性能
2.bigtable內部存儲數據文件是SSTable,它是個持久排序的Map結構,是一個數據塊,用加載到內存的索引定位(用二分法定位數據位置)。google
3.Chubby是個文件鎖什麼的原理沒明白?
4.bigtable包括鏈接客戶端的庫,一個Master(負載和垃圾收集)多個tablet服務器,通訊時候直接和tablet服務器通訊,因此Master是個調配管控的做用,負載通常不會很是大。
5.Tablet位置
Root tablet是個行關鍵字(表標誌&最後一行編碼)。(若是每一個Tablet存儲128MB數據,那麼一共能夠存儲2^61字節數據)。大約:2147483648GB。
tablet放在內存中,能夠預取減小可能的開銷(NameNode),還有一個次級信息用來排查錯誤和性能分析(SecondNameNode)。
這個地方很差理解的是,tablet服務器加入後再chubby中放一個文件做爲會話的獨佔鎖,tablet服務器退出時候會嘗試釋放這個獨佔鎖,因此Master就是判斷這個鎖來判斷tablet服務器是否還提供服務。
6.tablet分配,master會掃描現有原數據和tablelet服務已分配信息,以爲該怎麼分配tablelet。
三.tablet服務
1.更新時候寫日誌,而後用Redo point來重建memtable,最近提交的排序緩存是memtable。讀時候從sstable和memtable字典順序合併的視圖表中讀取。w/r都有一個從Chubby中判斷用戶權限的過程。讀寫分割合併是能夠同時進行的。
2.空間收縮
沒太看明白啥過程?只不過知道有一種緩存到必定程度轉SStable的過程,和合並後,刪除回收數據空間的過程。
3.局部性羣組
解決位置相關性列族的訪問速度,將有位置關聯須要或特定要求的列族劃分爲一個局部性羣組,把頻繁訪問的小塊數據放入內存或緩存是一種方法。
4.壓縮
壓縮時速率重要,同時空間比率也有較大提高,由於採用的算法選擇適合的行得到了同個主機相同的數據聚簇以提升壓縮比率。
5.緩存讀取提升性能
緩存Key-value 和block,有位置局部性讀取,能能更好。
6.bloom過濾器犧牲了一部份內存代價得到了是否訪問硬盤的特性。
7.commit日誌不是原來的每一個tablet服務器一個,按(table,row name,log sequence number)排序,過程也是Master主導的並行排序。寫日誌的時候也是線程並行寫的,並且有序號的惟一性,實現時就能夠讀時候按塊連續讀。
8.tablet恢復提速壓縮日誌並避免從新從日誌中恢復。
9.SSTable緩存外的SSTable是不變的,因此咱們分隔時能夠沒必要爲每一個分隔出的Tablet創建SSTable集合,能夠共享原來的Tablet的SSTable。
10.性能圖看基本上讀取次數和讀取量雖不成正比,基本仍是線性提高的。
11.單個tablet服務器性能提高
序列讀/隨機讀性能要考慮到文件大小,是否放入內存/緩存中。序列寫/隨機寫,性能至關。
12.性能提高
單個服務器可能受CPU限制,隨機讀取可能受網絡中的Block傳輸限制。還有網絡不均衡和移動後暫不可用形成。
13.實際應用
1個Bigtable集羣運行在各類各樣的服務器集羣上。
14.google earth用的就是地理劃分爲行,列族存儲地理數據原,用in-memory的列族。
15.經驗教訓
a,各類可能的異常,硬件,網絡的,不假定只返回錯誤集合中的一個值。
b,tablet結構上鎖問題,同步問題,METADATA訪問掛起問題,GFS寫入慢等操做問題都會有所監控和記錄。監控集羣狀態,流量等信息。
c.設計簡單的協議,最普遍使用的特性的協議。
16.相關工做
嘗試過一些其餘組件的B-tree,Key-value pair。還有oracle,IBM,db2還嘗試了一個行的事物功能的完整性處理。Bigtable局部性也有以列壓縮存儲和讀取性能的方案。bigtable也是支持每臺服務器數千次操做的。
四.結論
bigtable能夠隨着時間的增長,經過簡單的增長機器,擴展系統的承載能力。它給的存儲方案帶來不少優點,能夠設置本身的模型,以及用到的其餘google基礎構件,若是出現瓶頸或效率,能比較快速的解決。