演示文稿主題怎么設(shè)置啊(怎么將演示文稿主題設(shè)置)
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)存的。
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)容。