官术网_书友最值得收藏!

1.1.3 BigTable介紹

Fay Chang撰寫的Google論文“BigTable一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)”中,提出了利用Google的文件系統(tǒng)(GFS)提供分布式數(shù)據(jù)存儲(chǔ),而HBase正是BigTable的實(shí)現(xiàn),其在Hadoop的HDFS之上提供了類似于BigTable的實(shí)現(xiàn)。所以了解BigTable就明白了HBase的存儲(chǔ)模式。

BigTable是一個(gè)分布式存儲(chǔ)系統(tǒng),起初用于解決典型的互聯(lián)網(wǎng)搜索問題,利用谷歌提出的MapReduce分布式并行計(jì)算模型來處理海量數(shù)據(jù),使用GFS作為底層數(shù)據(jù)存儲(chǔ),采用Chubby提供協(xié)同服務(wù)管理,可以擴(kuò)展到PB級(jí)別的數(shù)據(jù)和上千臺(tái)機(jī)器,具備廣泛應(yīng)用性、可擴(kuò)展性、高性能和高可用性等特點(diǎn)。下面介紹與BigTable相關(guān)的基礎(chǔ)知識(shí)。

1. 互聯(lián)網(wǎng)索引

(1)存儲(chǔ):爬蟲持續(xù)不斷地抓取新頁面,這些頁面每頁一行地存儲(chǔ)到BigTable里。

(2)索引:MapReduce計(jì)算作業(yè)運(yùn)行在整張表上,生成索引,為網(wǎng)絡(luò)搜索應(yīng)用做準(zhǔn)備。

(3)搜索:響應(yīng)用戶發(fā)起網(wǎng)絡(luò)搜索請求。網(wǎng)絡(luò)搜索應(yīng)用查詢建立好的索引,從BigTable得到網(wǎng)頁,獲得搜索結(jié)果后提交給用戶。

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

BigTable是一個(gè)分布式多維映射表,表中的數(shù)據(jù)通過一個(gè)行關(guān)鍵字(RowKey)、一個(gè)列關(guān)鍵字(ColumnKey)以及一個(gè)時(shí)間戳(TimeStamp)進(jìn)行索引。

BigTable對(duì)存儲(chǔ)在其中的數(shù)據(jù)不做任何解析,一律看作字符串。其存儲(chǔ)邏輯可以表示為:(row:string, column:string, time:int)→string。

由于規(guī)模的問題,單個(gè)的大表不利于數(shù)據(jù)處理,因此BigTable將一個(gè)表分成了多個(gè)子表,每個(gè)子表包含多個(gè)行。子表是BigTable中數(shù)據(jù)劃分和負(fù)載均衡的基本單位。

3. BigTable數(shù)據(jù)庫架構(gòu)

BigTable數(shù)據(jù)庫由主服務(wù)器和分服務(wù)器構(gòu)成,把數(shù)據(jù)庫看作一張大表,那么可將其劃分為許多的小表,這些小表就稱為Tablet,是BigTable中最小的處理單位。

主服務(wù)器負(fù)責(zé)將Tablet分配到Tablet服務(wù)器、檢測新增和過期的Tablet服務(wù)器、平衡Tablet服務(wù)器之間的負(fù)載、GFS垃圾文件的回收、數(shù)據(jù)模式的改變等。Tablet服務(wù)器負(fù)責(zé)處理數(shù)據(jù)的讀寫,并在Tablet規(guī)模過大時(shí)進(jìn)行拆分。

BigTable使用集群管理系統(tǒng)來調(diào)度任務(wù)管理資源、監(jiān)測服務(wù)器狀態(tài)并處理服務(wù)器故障。

BigTable將數(shù)據(jù)存儲(chǔ)分為兩部分:最近的更新存儲(chǔ)在內(nèi)存中,較老的更新則以SSTable的格式存儲(chǔ)在GFS,后者是主體部分,也是不可變的數(shù)據(jù)結(jié)構(gòu)。寫操作的內(nèi)容插入到MemTable中,當(dāng)MemTable的大小達(dá)到一個(gè)閾值時(shí)就凍結(jié),然后創(chuàng)建一個(gè)新的MemTable,舊的就轉(zhuǎn)換成一個(gè)SSTable寫入GFS。

BigTable由客戶端程序庫(Client Library)、一個(gè)主服務(wù)器(Master Server)和多個(gè)子表服務(wù)器(Tablet Server)組成,架構(gòu)流程圖如圖1-3所示。

圖1-3 BigTable數(shù)據(jù)庫架構(gòu)流程

客戶訪問BigTable服務(wù)時(shí),首先要利用其庫函數(shù)執(zhí)行打開操作來打開一個(gè)鎖,鎖打開以后,客戶端就可以和子表服務(wù)器進(jìn)行通信;和許多具有單個(gè)主節(jié)點(diǎn)分布式系統(tǒng)一樣,客戶端主要與子表服務(wù)器通信,幾乎不和主服務(wù)器進(jìn)行通信,這使得主服務(wù)器的負(fù)載大大降低;主服務(wù)主要進(jìn)行一些元數(shù)據(jù)操作以及子表服務(wù)器之間負(fù)載調(diào)度,而實(shí)際數(shù)據(jù)存儲(chǔ)在子表服務(wù)器上。

主站蜘蛛池模板: 宝鸡市| 西吉县| 边坝县| 清水县| 东明县| 台前县| 云梦县| 丘北县| 遵化市| 玉门市| 中阳县| 桦甸市| 上饶县| 山阴县| 伊宁县| 苏尼特左旗| 宜都市| 平顶山市| 连山| 始兴县| 敖汉旗| 宁安市| 大英县| 鹿泉市| 南汇区| 绥中县| 咸丰县| 都江堰市| 蒙山县| 广灵县| 民乐县| 南城县| 久治县| 仁化县| 宝清县| 肃宁县| 营山县| 深泽县| 鄂伦春自治旗| 兴义市| 贡山|