小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Bigtable Notes

 daomucun 2011-07-14

Bigtable Notes

205人閱讀 評論(1) 收藏 舉報

  Bigtable Notes


Google bigtable paper: http://labs.google.com/papers/bigtable.html

0.設(shè)計目標(biāo):

管理海量結(jié)構(gòu)化數(shù)據(jù)
使用廉價的服務(wù)器
性能上不但能滿足高吞吐量,也能滿足低延遲

1.介紹

廣泛適應(yīng)性
可伸縮
高性能
高可用

Bigtable沒有提供完整的關(guān)系數(shù)據(jù)庫模型。
它實現(xiàn)了一個簡單的模型,但是支持動態(tài)控制模型的布局和格式。
支持locality(通過設(shè)計schema,可以把要經(jīng)常一起訪問的數(shù)據(jù)放在一起)

2.數(shù)據(jù)模型


簡單的說,就是一個排序的多維的map.
map的key是由rowkey+column name+timestamp組成的

Rows

每一行的rowkey可以是任意字符,最多64KB。
對一行的讀寫是原子的(無論涉及到幾個column),這樣做的好處就是簡化了并發(fā)機制,用戶也能很容易理解。

Column Family

基本的訪問控制單位,由多個column組成。
CF必須預(yù)先創(chuàng)建好,并且通常不會很多(數(shù)以百計的),而且一般很少改動。
用戶訪問控制的單位是基于CF的。也就是說對于一個CF,不同的用戶可能有不同的訪問權(quán)限。

Column

Column的格式是"family:qualifier",family必須是由可打印的字符組成的,qualifier可以是任意字符。

Timestamps

64bit整型,由系統(tǒng)決定或者用戶指定。
用戶可以指定對于每個CF存貯幾個版本的數(shù)據(jù),或者指定最多保留的時間(TTL)。

3.Dependency

 

GFS 

分布式文件系統(tǒng)(相比較HBase是HDFS)

Bigtable使用GFS來存貯日志和數(shù)據(jù)。
Bigtable數(shù)據(jù)存貯格式的是SSTable.
SSTable 是由排序的,不可修改的key-value對組成的。
SSTable是由很多block組成,每個block的是64KB.
SSTable有一個block index在文件的末尾,這樣就能快速定位block(使用二分法)
SSTable可以完整的映射到memory,這樣讀的時候可以不用讀磁盤。

Cubby

高可用的分布式鎖服務(wù) (相比較HBase是zookeeper)
Cubby使用Paxos算法來保證數(shù)據(jù)的一致性。(Paxos 算法解決的問題是一個分布式系統(tǒng)如何就某個值(決議)達(dá)成一致)
Cubby提供了目錄和小文件,他們都可以用做鎖,讀寫一個文件都是原子的。
每一個Cubby Client維護(hù)找一個session,當(dāng)session過期,它就會失去擁有的鎖和句柄。
Cubby Client可以設(shè)置callback,這樣當(dāng)文件改變就能得到通知。
Bigtable用Cubby:
保證最多只有一個活動的master node
存貯啟動的數(shù)據(jù)
存貯表的schema
存貯CF的訪問控制列表


4.實現(xiàn)

Bigtable實現(xiàn)由三部分組成Client端、一個master server和多個tablet server。

Master server

把tablet指配給某個tablet server處理
檢查新加的或者過期的tablet server
平衡tablet server的負(fù)載
回收GFS上面的過期數(shù)據(jù)
處理表的創(chuàng)建或者schema的修改

由于大部分Bigtable client并不需要和Master server通訊,而是直接和tablet server通訊,所以master server的負(fù)載相對較輕。

Tablet server

讀寫數(shù)據(jù)
切分tablet,當(dāng)tablet過大

Tablet location

Bigtable使用了三層結(jié)構(gòu)。
Chubby file-->ROOT tablet(never split)-->METADATA tablet-->User Tablet
The Chubby file contains the location of ROOT tablet.

Tablet Assignment

每一個tablet被分配給一個tablet server.
Master server保留著活著的tablet server的列表以及tablet和tablet server的對應(yīng)關(guān)系。
Bigtable使用Cubby來跟蹤tablet server的狀態(tài)
每一個tablet server啟動的時候,會在Cubby特定的文件夾生成一個文件,并得到這個文件鎖。
當(dāng)這個tablet server下線的時候,這個文件就會被刪除。反之,如果刪除該文件,tablet server也會結(jié)束自己。
Master server的失敗不會影響對現(xiàn)有tablet的分配。

新的Master server啟動的時候,會做以下動作:
1.獲得master鎖,這樣避免有多個master server起來
2.掃描Clubby里server的目錄,這樣就知道所有活著的tablet server
3.詢問每一個tablet server,這樣就知道每一個tablet server處理的tablet
4.掃描METADATA tablet,獲得tablet列表

Tablet Serving

寫操作:
當(dāng)更新時,首先會寫入commit log(放在GFS),用于記錄
最近的更新都是放在memory里面,memtable
老的更新才會寫到SSTable中
當(dāng)發(fā)生異常情況,比如掉電,內(nèi)存的數(shù)據(jù)丟失,這時候就可以根據(jù)commit log來恢復(fù)Tablet

讀操作:
會合并所有的SSTable和memtable的結(jié)果

當(dāng)Tablet進(jìn)行合并和split,讀寫操作都可以正常進(jìn)行

Compaction

minor compaction:把memtable轉(zhuǎn)成SSTable,減少內(nèi)存使用
major compaction:把一個Tablet所有的SSTable合成一個SSTable,刪除過期數(shù)據(jù)

5.優(yōu)化

Locality groups

用戶可以把多個CF綁在一個Locality groups里面,相對應(yīng)于一個SSTable
這樣就可以減少磁盤IO,不必一次讀到所有數(shù)據(jù)
另外,對于一個locaity groups 有一個 in-memory屬性,這個屬性對那些數(shù)據(jù)量不大,但是頻繁讀寫,可以提高性能。

Compression

用戶可以指定壓縮算法,這個用來壓縮每一個SSTable的每一個block。
這樣做的好處是,不需要解壓整個SSTable文件
用戶可以指定兩步的壓縮算法,可以達(dá)到更好的壓縮比(10:1),這是因為相臨的數(shù)據(jù)一般比較相似

讀操作cache

兩級cache:
Scan cache(highlevel)- 
    cache由SSTable返回的key-value對
    對那些重復(fù)的讀操作很有用
Block cache (lowlevel)-
    cache SSTable
    對那些讀附近的數(shù)據(jù)比較有用(順序讀)

布隆過濾器(Bloom Filter)

布隆過濾器可以用于檢索一個元素是否在一個集合中。
布隆過濾器可以用來減少對磁盤的讀操作。
尤其對于查詢一個不存在的rowkey,可以不需要訪問磁盤。

commit-log的實現(xiàn)

如果對于每一個Tablet都有一個commit log的話,這樣會導(dǎo)致同時會寫多個log文件
所以BigTable對同一個Tablet server使用同一個commit log
使用“table; row name; log sequence number"三元組作為log的key
這樣的好處就是相同table的log將在一起,以便于tablet的恢復(fù)
考慮到GFS的latency問題,Bigtable使用兩個線程來寫log,每一個線程都寫自己的log,這樣就會有兩份commit log,但兩個線程同時只有一個active

加速tablet的恢復(fù)

當(dāng)master把一個tablet從一個tablet server移到另外一個tablet serer,分為四步:
源tablet server做一次minor compaction,把memory寫到磁盤
源tablet server停止服務(wù)該tablet
源tablet server再做一次minor compaction,這次會很快
正式轉(zhuǎn)移到另外一個tablet server


利用不可修改性

SSTable被設(shè)計成不可修改的,這樣做的主要好處是不需要同步。
另外,SSTable的不可修改性,使得回收過期的SSTable變得簡單。
最后,不可修改使得tablet split起來非常迅速,子tablet可以跟父tablet share相同的SSTable文件
而memtable是可以修改的,對每一行使用了copy-on-write,這樣讀寫就可以并行處理

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多