- 分布式數(shù)據(jù)庫HBase案例教程
- 陳建平等主編
- 1046字
- 2023-09-15 18:00:59
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ù)器上。
- Boost.Asio C++ Network Programming(Second Edition)
- DevOps with Kubernetes
- PostgreSQL Cookbook
- Learning Bayesian Models with R
- Practical Game Design
- Python機(jī)器學(xué)習(xí)經(jīng)典實(shí)例
- MongoDB權(quán)威指南(第3版)
- 表哥的Access入門:以Excel視角快速學(xué)習(xí)數(shù)據(jù)庫開發(fā)(第2版)
- jQuery炫酷應(yīng)用實(shí)例集錦
- Azure Serverless Computing Cookbook
- Lift Application Development Cookbook
- Android Studio Cookbook
- 區(qū)塊鏈架構(gòu)之美:從比特幣、以太坊、超級(jí)賬本看區(qū)塊鏈架構(gòu)設(shè)計(jì)
- Sails.js Essentials
- Python Projects for Kids