Blob數(shù)據(jù)類型存儲(chǔ)二進(jìn)制數(shù)據(jù),可以存儲(chǔ)大型的無結(jié)構(gòu)數(shù)據(jù),容量巨大,能夠滿足海量數(shù)據(jù)存儲(chǔ)需求。Table數(shù)據(jù)類型能夠提供更加結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ),但是它不同于關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中的二維關(guān)系表,查詢語言也不是大家熟悉的關(guān)系查詢語言SQL。Queue類型的作用和微軟消息隊(duì)列(MSMQ)相近,用來支持在Windows Azure應(yīng)用程序組件之間進(jìn)行通信。
Windows Azure Blob
Windows Azure Blob用來存儲(chǔ)大型數(shù)據(jù)對(duì)象,用于構(gòu)建重量級(jí)、可擴(kuò)展的應(yīng)用程序。 Blob分層分塊管理數(shù)據(jù),這樣管理數(shù)據(jù)有很多好處,.比如可以對(duì)數(shù)據(jù)建立索引,根據(jù)一 定的算法可以方便地對(duì)所要査找的數(shù)據(jù)定位,當(dāng)數(shù)據(jù)傳送失敗或產(chǎn)生錯(cuò)誤時(shí),可以用最近 的—個(gè)塊來進(jìn)行重傳,而不必傳送整個(gè)Blob。Blob還提供了對(duì)數(shù)據(jù)信息進(jìn)行描述的元數(shù) 據(jù)機(jī)制,可以更好地對(duì)數(shù)據(jù)進(jìn)行管理。
Blob數(shù)據(jù)模型
Blob中的所有數(shù)據(jù)資源以URI (統(tǒng)一資源標(biāo)示符)的方式標(biāo)記,它具有層次結(jié)構(gòu)的命名空間,URI形式如下:http://,blob.core.windows.net//,對(duì)所有存儲(chǔ)資源的訪問必須通過一個(gè)存儲(chǔ)賬戶,Blob對(duì)象也不例外,最高層為存儲(chǔ)賬戶(Storage Account),被指定為URI的第一部分。一個(gè)存儲(chǔ)賬戶能夠擁有一個(gè)或多個(gè)容器(Container),每個(gè)容器擁有一個(gè)或多個(gè)Blob,每個(gè)Blob數(shù)據(jù)容量可以高50GB (每個(gè)Blob還可以分成若干Block),每個(gè)Blob還可以包含數(shù)據(jù)的元數(shù)據(jù)信息。
對(duì)于數(shù)據(jù)的安全性,系統(tǒng)提供了訪問控制策略,Windows Azure Blob對(duì)容器設(shè)置了共享策略,目前系統(tǒng)提供了Public READ和Private兩種策略修飾符,前者表明該容器的內(nèi)容不需授權(quán)就可以被任何應(yīng)用程序訪問,后者表明只有賬戶的所有者可以通過授權(quán)訪問。對(duì)容器中的數(shù)據(jù),可以建立相應(yīng)的元數(shù)據(jù),元數(shù)據(jù)以〈name, value>對(duì)的形式表示。
每個(gè)容器最多有8KB的元數(shù)據(jù)說明。Blob包含于容器中,同二份容器中每個(gè)Blob具有唯一的用字符串標(biāo)識(shí)的名字。和容器一樣,它也具有相同形式的元數(shù)據(jù)。
Blob有以下兩種形式。
(1)Block Blob。每個(gè)Block Blob存儲(chǔ)容量可達(dá)200GB。為了方便存儲(chǔ)對(duì)象的轉(zhuǎn)移,每個(gè)Blob都被劃分為多個(gè)Blocks。在傳輸?shù)倪^程中如果發(fā)生錯(cuò)誤,那么只需要將最近傳送的Block重新傳輸,一旦所有Blob Block都上傳完成,整個(gè)Blob能夠立即被提交。
(2)Page Blob。每個(gè)Page Blob存儲(chǔ)容量可以達(dá)到1TB。Page Blob可以被劃分為很多頁,每頁大小為512字節(jié),而且應(yīng)用可以任意地自由讀寫B(tài)lob中的單個(gè)頁。
Blob REST Interface
如果應(yīng)用程序要訪問Blob,可以利用系統(tǒng)提供的標(biāo)準(zhǔn)HTTP REST PUT/GET/DELECT接口,使用這些接口可以對(duì)Blob執(zhí)行如下5種操作。
(1)PUT Blob:插入一個(gè)新的Blob或替換給定的Blob對(duì)象。
(2)GET Blob:獲取整個(gè)Blob,或使用標(biāo)準(zhǔn)HTTP Range GET操作獲取Blob的指定部分。
(3)DELETE Blob:刪除一個(gè)Blob。
(4)COPY Blob:復(fù)制Blob。主要作用是在源Blob和目標(biāo)Blob之間復(fù)制一個(gè)Blob。復(fù)制內(nèi)容包括Blob元數(shù)據(jù),屬性和Block列表。
(5)GET Block List:獲取Block列表。主要作用是檢索上傳Blob的Block列表。每個(gè)Blob均有兩類Block列表:一類是Commited Block List,指已上傳的作為PutBlockList一部分的Block列表;另外一類是Uncommitted Block List,指當(dāng)前正在提交或尚未提交的Blocks列表。
使用PUT操作請(qǐng)求,一次最多可以上傳64MB的Blob到服務(wù)器托管到云端。如果用戶上傳大于64MB的Blob,Windows Azure Blob提供了Block接口來解決這一問題。該方法的主要思想是分割重組,主要分為以下幾步。
首先將需要上傳的Blob分割成連續(xù)的若干個(gè)Block,例如,一個(gè)4GB的電影可以劃分成1000個(gè)Block,每個(gè)4MB,每個(gè)Block具有一個(gè)唯一的ID,如“Block 1”、“Block 2”等。每個(gè)Block屬于特定的Blob,因此,同一個(gè)Blob的Block具有不同的ID,不同的Blob的Block可以具有相同的ID,每個(gè)Block的最大長(zhǎng)度為4MB,且Block的大小是任意的,同一個(gè)Blob的Block的大小不必相等。
Blob數(shù)據(jù)被分割成更小的Block后,可以通過接口將每個(gè)Block上傳到云端,上傳時(shí)需要指明是哪個(gè)Blob的哪個(gè)Block。當(dāng)所有的Block都上傳到Windows Azure Storage中后,提交上傳的Block的列表信息及其所屬的Blob,系統(tǒng)使用這些信息將這些Block重組成可讀的Blob,以便客戶端可以使用下面形式的URI完整地獲取該Blob。