當前位置:成語大全網 - 書法字典 - 大表-分布式結構化數據存儲系統

大表-分布式結構化數據存儲系統

新浪網

Bigtable是壹個分布式結構化數據存儲系統,旨在處理海量數據:通常是分布在數千臺普通服務器上的PB級數據。許多谷歌項目使用Bigtable來存儲數據,包括Web索引、GoogleEarth和Google Finance。這些應用程序對Bigtable的要求非常不同,無論是在數據量方面(從URL到網頁到衛星圖像)還是在響應速度方面(從後端批處理到實時數據服務)。

Bigtable實現了以下目標:廣泛的適用性、可擴展性、高性能和高可用性。Bigtable是壹種稀疏、分布式和持久的多維排序映射。

圖1:存儲網頁示例的表格片段。線路名稱是壹個反向URL。contents列族存儲網頁的內容,而anchor列族存儲引用網頁的anchor鏈接文本(alex註意:如果您不知道HTML的Anchor,請搜索它)。CNN的主頁被Sports Illustrater和MY-look的主頁引用,因此這壹行包含名為“anchor:cnnsi.com”和“anchor:MY . look . ca”的列。每個錨鏈接只有壹個版本(alex註意:註意時間戳標識列的版本,t9和t8分別標識兩個錨鏈接的版本);內容列有三個版本,分別由時間戳t3、t5和t6標識。

線條

Bigtable通過行關鍵字的字典順序來組織數據。表中的每壹行都可以動態分區。每個分區稱為壹個“平板”,平板是數據分布和負載平衡調整的最小單位。

列祖

Webtable有壹個列族語言,用於存儲編寫網頁的語言。

我們只使用語言列族中的壹個列關鍵字來存儲每個網頁的語言標識ID。Webtable中另壹個有用的列族是anchor;這個列族的每個列關鍵字代表壹個錨鏈接,如圖1所示。錨點列系列的限定符是引用此網頁的網站的名稱;錨列族的每壹列中的數據項存儲鏈接文本。訪問控制、磁盤和內存使用統計都是在列族級別執行的。

印時戳

不同版本的數據通過時間戳進行索引。Bigtable時間戳的類型是64位整數。

Bigtable可以為時間戳賦值,以表示精確到毫秒的“實時”時間;用戶程序也可以給時間戳賦值。如果應用程序需要避免數據版本沖突,它必須生成自己唯壹的時間戳。在數據項中,不同版本的數據按照時間戳進行逆序排序,即最新的數據排在第壹位。為了減輕多個數據版本的管理負擔,我們為每個列族提供了兩個設置參數,通過它們Bigtable可以自動從廢棄的數據版本中收集垃圾。用戶可以指定只保存最近n個版本的數據,或者只保存“足夠新”的數據版本(例如,只保存最近7天寫入的數據)。

Bigtable支持的其他功能

1,Bigtable支持單行事務處理。通過該功能,用戶可以對存儲在line關鍵字下的數據執行原子讀取-更新-寫入操作。

2.Bigtable允許數據項用作整數計數器。

3.Bigtable允許用戶在服務器的地址空間中執行腳本。

4.Bigtable可以與MapReduce壹起使用,MapReduce是Google開發的大規模並行計算框架。我們開發了壹些包裝類。通過使用這些包裝器類,Bigtable可以用作MapReduce框架的輸入和輸出。

Bigtable依賴於google的多項技術。使用GFS存儲日誌和數據文件;以STable文件格式存儲數據;使用Chubby管理元數據:

Bigtable是建立在其他幾個Google基本組件之上的。BigTable使用Google的分布式文件系統(GFS)來存儲日誌文件和數據文件。BigTable集群通常運行在* * *共享機器池中,池中的機器還將運行各種其他分布式應用程序。BigTable進程經常與其他應用程序進程共享機器。BigTable依靠集群管理系統來調度任務、管理機器上的資源、處理機器故障以及監控機器狀態。

用於在BigTable中存儲數據的文件是Google SSTable格式的。SSTable是持久的、有序的、不可改變的Map結構,而Map是鍵值映射數據結構,key和value的值是任意字節字符串。從內部來看,STable是壹系列數據塊(通常每個塊的大小為64KB,可以進行配置)。。SSTable使用塊索引(通常存儲在SSTable的末尾)來定位數據塊;當打開STable時,索引被加載到內存中。每次搜索都可以通過磁盤搜索來完成:首先,使用二分搜索法方法在內存的索引中找到數據塊的位置,然後從硬盤中讀取相應的數據塊。妳也可以選擇把整個表放在內存中,這樣妳就不用訪問硬盤了。

BigTable還依賴於壹個高度可用和序列化的分布式鎖服務組件Chubby。Chubby有五個活動副本,只有壹個主副本提供服務。復制品與Paxos算法壹致。Chubby提供了壹個名稱空間(包括壹些目錄和文件),每個目錄和文件都是壹把鎖。查比的客戶必須與查比保持通話。如果客戶端的會話過期,所有鎖定都將丟失。

Bigtable包括三個主要組件:鏈接到客戶端程序的庫、壹個主服務器和多個平板服務器。

Bigtable將對表進行切片,表的大小將保持在100-200MB的範圍內。壹旦超出範圍,它將被分割成更小的塊或合並成更大的塊。每個切片服務器負責壹定數量的切片,處理讀取和寫入其切片的請求,以及拆分或合並切片。可以根據負載隨時添加和刪除芯片服務器。在這裏,芯片服務器並不真正存儲數據,而是相當於連接Bigtable和GFS的代理,客戶端的壹些數據操作通過芯片服務器代理間接訪問GFS。主服務器負責向切片服務器分配切片、監控切片服務器的添加和刪除、平衡切片服務器的負載以及處理表和列族的創建。請註意,主服務器不存儲任何切片,不提供任何數據服務,也不提供切片的定位信息。

當客戶端需要讀寫數據時,直接聯系芯片服務器。由於客戶端不需要從主服務器獲取切片的位置信息,因此大多數客戶端從不需要訪問主服務器,主服務器的負載壹般較輕。

主服務器主要負責以下任務:將平板電腦分配給平板電腦服務器,檢測新添加或過期的平板電腦服務器,平衡平板電腦服務器的負載,以及對保存在GFS上的文件進行垃圾收集。此外,它還處理模式的相關修改操作,例如建立表族和列族。

我們使用類似於B+樹的三層結構來存儲平板電腦的位置信息。

第壹層是存儲在Chubby中的文件,其中包含根平板的位置信息。這個胖墩文件屬於胖墩服務。壹旦Chubby不可用,就意味著根平板的位置丟失,整個Bigtable不可用。

第二層是根碑。根片實際上是元數據表的第壹個片,它保存元數據表其他片的位置。根碑比較特殊,為了保持樹的深度不變,根碑從不劈叉。

第三層是其他元數據片,它與根片壹起形成壹個完整的元數據表。每個元數據都包含許多用戶片段的位置信息。

切片的數據最終寫入GFS中,切片在GFS中的物理形式是幾個SSTable文件。下圖顯示了讀寫操作的基本情況。

BigTable和GFS的關系

該集群包括壹個主服務器和壹個芯片服務器。主服務器負責向芯片服務器分發芯片,而芯片服務器僅負責特定的數據服務。但不要以為芯片服務器真的存儲數據(內存中memtable的數據除外),數據的真實位置只有GFS知道。主服務器將芯片分配給芯片服務器,這意味著芯片服務器獲得芯片的所有SSTable文件名,芯片服務器可以通過壹些索引機制知道所需數據在哪個SSTable文件中,然後從GFS中讀取SSTable文件的數據,這些數據可能分布在幾個chunkserver上。

簡化的大表結構圖;

結構圖以Webtable表格為例,其中存儲了網易、百度和豆瓣的幾個網頁。當我們想查找昨天百度貼吧的內容時,我們可以向web table(com。百度貼吧,內容:,昨天)。

假設客戶端沒有緩存,Bigtable訪問根平板的切片服務器,希望獲取網頁在哪個元數據切片中所屬切片的位置信息。使用元數據。webtable.com.baidu.tieba作為在根平板中搜索的行鍵,並定位比它大的最後壹個,即元數據。webtable.com.baidu.www,因此確定需要元數據表的片段A。訪問電影A的電影服務器,繼續搜索Webtable.com.baidu.tieba定位Webtable.com.baidu.www更大,確定需要Webtable表的電影B。訪問芯片B的芯片服務器獲取數據。

這裏需要註意的是,每個slice實際上由幾個SSTable文件和memtable組成,並且這些SSTable和memtable是經過排序的。這導致在搜索片B時,可能需要搜索所有的STable和memtable此外,客戶端不應該直接從元數據表中獲取SSTable的文件名,而應該只獲取piece屬於piece服務器的信息,並通過piece服務器作為代理訪問SSTable。