回顧Bigtable經(jīng)典設(shè)計

      網(wǎng)友投稿 1009 2022-05-29

      設(shè)計目標

      Bigtable的四個設(shè)計目標:

      Wide Applicability: 廣泛的適用場景

      Scalability:橫向擴展能力

      High Performance: 高性能

      High Availability: 高可用

      Table

      A Bigtable is a?sparse,?distributed,?persistent multi-dimensional sorted map.

      簡單理解一下這句定義所闡述的幾個關(guān)鍵點:

      一個表是一個包含海量Key-Value對的Map,數(shù)據(jù)是持久化存儲的。

      這個大的Map需要支持多個分區(qū)來實現(xiàn)分布式。

      這個Map按照Key進行排序,這個Key是一個由{Row Key, Column Key, Timestamp}組成的多維結(jié)構(gòu)。

      每一行列的組成并不是嚴格的結(jié)構(gòu),而是稀疏的,也就是說,行與行可以由不同的列組成:

      Row

      每一行數(shù)據(jù)都擁有一個唯一的Row Key,可以將Row Key理解為主鍵。

      Row Key是一個Byte String,通常長度在10~100Bytes左右,建議不超過4KB。一行中包含一個或多個列。

      Bigtable支持Row級別操作的原子性。

      所有的數(shù)據(jù)按照Row Key的字典順序進行排序。

      Tablet

      Table的橫向數(shù)據(jù)分區(qū)(分片)稱之為Tablet。

      Tablet是一個連續(xù)的Row Key區(qū)間。

      Tablet是數(shù)據(jù)分布與負載均衡的基本單元。

      一個Tablet增長到一定大小之后可以自動分裂成兩個Tablets。

      多個連續(xù)的Tablets可以合并成一個大的Tablet。

      Column Family

      權(quán)限控制的最小單元。

      一個Column Family通常是一個或多個相同類型的列的集合,這樣在數(shù)據(jù)壓縮率上可以獲取更好的效果。

      Column Families的數(shù)量不建議超過百級別。

      Column Key的組成結(jié)構(gòu)為Family:Qualifier。Qualifier可以理解成一個Column Family中的列標識。

      Timestamp

      每一個Column Key可能關(guān)聯(lián)多次更新,因此,Bigtable使用Timestamp來標識不同的版本。

      同一個Column Key的多個版本按Timestamp倒序存放,這樣查詢時總是先讀取到最新的版本。

      每一個Column Family允許用戶配置最多保留的版本數(shù)量,超出的版本將會被清理掉。

      關(guān)鍵模塊

      Client Library

      Master Server

      1)Tablet Server管理。

      2)Tablet到Tablet Server的分配。

      3)負載均衡。

      4)垃圾文件回收。

      5)建表以及Schema變更管理。

      Tablet Server管理Tablet的數(shù)據(jù)服務(wù)節(jié)點。

      依賴服務(wù)

      GFS(Colossus)分布式文件系統(tǒng)。用來持久化存放Bigtable的關(guān)聯(lián)文件(日志文件以及數(shù)據(jù)文件)。

      Chubby

      1)Active Master選舉。

      2)Tablet根路由信息。

      3)Tablet Server故障節(jié)點通知以及新節(jié)點發(fā)現(xiàn)。

      4)Table Schema信息。

      5)存儲Access Control List信息。

      數(shù)據(jù)路由

      在METADATA表中記錄了每一個用戶表Tablet所關(guān)聯(lián)的Key Range信息以及路由信息。

      METADATA本質(zhì)上也是一個Bigtable表,因此,自身也由一個或多個Tablet組成。

      Root表中記錄了METADATA Tablet的路由信息,Root表有且只有一個Tablet組成。

      LSM Tree

      Bigtable的LSM Tree實現(xiàn):

      數(shù)據(jù)在寫入到Tablet之前先順序?qū)懭氲揭粋€日志文件中。

      每一個Tablet Server上的多個Tablets共享同一個日志文件。

      數(shù)據(jù)成功被寫入到日志文件之后,再寫入到Tablet的Memtable(內(nèi)存排序Map)中。

      當Memtable中的數(shù)據(jù)達到一定的大小之后Flush到GFS中成為SSTable文件。SSTable解釋如下:

      SSTable is a simple abstraction to efficiently store large numbers of key-value pairs while optimizing for high throughput, sequential read/write workloads.

      Bigtable在寫WAL時所做的關(guān)鍵優(yōu)化:

      寫日志時,通過Group Commit減少IOPS,提升寫入性能。

      利用兩個寫入線程避免GFS的寫入時延毛刺。

      Locality Groups

      一個Locality Group是多個Column Families(經(jīng)常被一起訪問)的組合。

      同一個Locality Group中的數(shù)據(jù)會生成到同一個SSTable中。

      可以將一個Locality Group配置成是否是常駐內(nèi)存的。

      回顧Bigtable的經(jīng)典設(shè)計

      Compaction

      Compaction的三種類型以及對應(yīng)的作用:

      Minor Compaction: 將Memtable中的數(shù)據(jù)Flush成GFS中的SSTable文件,主要目的有兩個:1) 減少Memtable的內(nèi)存占用。2) 加速Tablet遷移或Tablet Server故障之后的因日志重放所消耗的時間。

      Merge Compaction: 將多個SSTable文件合并成一個大的SSTable文件,該過程不回收被標記刪除的數(shù)據(jù)。

      Major Compaction: 將同一個路徑下所有的SSTables合并成一個大的SSTable文件,該過程回收需要被清理的數(shù)據(jù)。

      BloomFilter

      支持使用BloomFilter來加速關(guān)于不存在的Row Key或Column的查詢,減少隨機磁盤IO。

      Compression

      Bigtable支持兩層壓縮機制:

      利用Bentley-McIlroy Encoding算法預(yù)先對公共的Strings進行壓縮編碼。

      在SSTable 16KB的Block級別采用一個快速的通用壓縮算法。

      Cache

      Bigtable支持兩類Cache:

      Scan Cache 緩存Key-Value數(shù)據(jù),主要針對頻繁發(fā)起的相同查詢。

      Block Cache 緩存STable的Block,主要是優(yōu)化臨近查詢場景。

      參考信息

      Bigtable: A Distributed Storage System for Structured Data

      Cloud Bigtable Document

      本文轉(zhuǎn)載自微信公眾號【NoSql漫談】。

      NoSQL數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:數(shù)據(jù)庫遷移到公有云需要注意的三個問題
      下一篇:RabbitMQ和Kafka到底怎么選?
      相關(guān)文章
      久久亚洲AV午夜福利精品一区 | 亚洲国产成人AV在线播放| 久久亚洲美女精品国产精品 | 亚洲偷自精品三十六区| 亚洲精品自拍视频| 亚洲美女视频免费| 亚洲网站在线免费观看| 久久久无码精品亚洲日韩按摩| 亚洲Av无码精品色午夜| 亚洲AV成人一区二区三区AV| 亚洲av午夜福利精品一区| 亚洲AV成人片色在线观看高潮| 久久精品亚洲视频| 亚洲综合在线观看视频| 亚洲黄色网址在线观看| 亚洲精品视频免费看| 亚洲另类视频在线观看| 亚洲国产成+人+综合| 亚洲色图激情文学| 亚洲色偷偷偷综合网| 精品亚洲av无码一区二区柚蜜| 国产亚洲精品2021自在线| 亚洲精品无码99在线观看 | 国产成人精品日本亚洲专区| 国产亚洲精品线观看动态图| 亚洲人成人无码网www电影首页| 亚洲国产精品VA在线观看麻豆 | 亚洲欧美国产国产一区二区三区| 亚洲一区二区三区在线观看网站| 亚洲av无码专区青青草原| 国产亚洲精品美女久久久久| 亚洲欧洲中文日韩久久AV乱码| 国产亚洲精品福利在线无卡一| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲伊人久久精品| 亚洲精品乱码久久久久久V| 亚洲AV无码成H人在线观看 | 亚洲一级毛片中文字幕| 亚洲久热无码av中文字幕| 国产午夜亚洲精品不卡电影| 亚洲国产精品一区二区三区久久|