由於在Google的資料中心儲存PB級以上的非關係型資料時候,比如網頁和地理資料等,為了更好地儲存和利用這些資料,Google開發了一套資料庫系統,名為“BigTable”。
技術概覽
從技術來講,BigTable不是一個傳統的關係型的資料庫,也不支援類似關聯(join)這樣進階的SQL操作,取而代之的是多級映射的資料結構,並支援大規模資料處理、高容錯性和自我管理等特性,提供PB級的儲存能力,使用結構化的檔案來儲存資料,並整個叢集每秒可處理數百萬的讀寫操作。
什麼是多級映射的資料結構呢?就是一個稀疏的、多維的和排序的Map,每個Cell(儲存格)由行關鍵字、列關鍵字和時間戳記來進行三維定位.Cell的內容本身就是一個字串,比如,儲存每個網頁的內容。在中, 反向的URL “com.cnn.www”是這行的關鍵字,“contents”這列儲存了多個版本的網頁內容,每個版本都有一個時間戳記。BigTable還提供一個用於將多個相似的列整合至一起的Column Family(列組)機制,比如,下面“anchor”這個Column Family就有“anchor: cnnsi.com”和“anchhor:my.look.ca”這個兩個列。通過Column Family這個概念,使得表可以輕鬆地橫向擴充。
圖1. BigTable資料模型圖表
在結構上,BigTable基於GFSDistributed File System和Chubby分布式鎖服務。BigTable主要分為兩部分:其一是Master節點,用來處理中繼資料相關的操作並支援負載平衡。其二是Tablet節點,主要用於儲存資料庫的分區tablet,並提供相應的資料訪問,同時tablet是基於名為SSTable的格式,對壓縮有很好的支援。為其具體的架構圖:
圖2. BigTable架構圖
相關產品
和之前介紹的MapReduce和GFS一樣,BigTable在開源界也有很多類似的產品,最著名的兩個莫過於屬於Hadoop系列的Hbase和來自於Facebook的Cassandra。Hbase的特色在於其完全繼承了BigTable的設計,所以它在MapReduce和海量資料存放區這兩方面支援地非常好,而Cassandra的則更傾向於成為全功能型資料庫。除了這兩個產品之外,我個人也設計一款類BigTable的資料庫,名為YunTable,意為“雲時代的BigTable”,它的目標是做一個BigTable的精簡版,並使其更適合雲環境,現在已經發布其0.8版,本已基本實現BigTable的準系統,官方網站是http://code.google.com/p/yuntable/,希望大家能多多關注。
實際用例
BigTable正在為Google六十多種產品和項目提供儲存和擷取結構化資料的支撐平台,其中包括有Google Print, Orkut,Google Maps,Google Earth和Blogger等,而且在Google內部至少運行著500個BigTable叢集。
下一代的BigTable
隨著Google內部服務對需求的不斷提高和技術的不斷地發展,導致原先的BigTable已經無法滿足使用者的需求,而Google也正在開發下一代BigTable,名為“Spanner(扳手)”,它主要有下面這些BigTable所無法支援的特性:
- 支援多種資料結構,比如table,familie,group和coprocessor等。
- 基於分層目錄和行的細粒度的複製和許可權管理。
- 支援跨資料中心的強一致性和弱一致性控制。
- 基於Paxos演算法的強一致性副本同步,並支援分散式交易。
- 提供許多自動化操作。
- 強大的擴充能力,能支援百萬台伺服器層級的叢集。
- 使用者可以自訂諸如延遲和複製次數等重要參數以適應不同的需求。