Bigtable: A Distributed Storage System for Structured Data (Google Inc.)

Bigtabe是一種分散式儲存系統,目的是為了管理大量(petabyte)且有結構性的data

若要簡單的描述Bigtable的話

Bigtable裡的資料會有三個欄位:row、column、time(int64)

但跟一般的MySQL之類的database不太一樣

Bigtable裡的資料可以被row、column和time同時index,

且index可以是任意字串 (arbitrary strings)

舉一個例子來說 (這篇paper上面的例子)

Row/Column contents: anchor:cnnsi.com anchor:my.look.ca
com.cnn.www <html>...</html> "CNN" "CNN.com"

若今天將一個CNN網頁存到Bigtable裡

那麼這個資料的row會是com.cnn.www (為甚麼倒過來等等再說明)

而column有三個:"contents:", "anchor:cnnsi.com", "anchor:my.look.ca"

contents儲存的是網頁的內容 (至於冒號的意義也等等再說明)

anchor:cnnsi.com和anchor:my.look.ca則是指出有這兩個網站指向CNN這個網頁

而這兩個網站用來連結CNN這個網頁的Link的名字分別是"CNN", "CNN.com"

如此一來就完成了最簡單的BigTable的Data

 

而BigTable有個特性就是是以row為單位的

所以寫入row時也是atomic的 (就是對於每個row一次就要寫完全部的column的值)

此外BigTable排列row時是按照字母排列的 (lexicogrphic)

所以這邊可以回答第一個問題:為甚麼com.cnn.www要反著寫?

這是因為將domain相似的放在一起時

BigTable在讀取出來的時候會比較快

例如某個BigTable T 在前幾筆資料都是com.*,之後接著是edu.*

最後才是gov.*

如此一來如果我要拿取的都是com domain下的資料就可以較快的拿取

對於分析domain也比較方便

( 所以 maps.google.com/index.html的存法就會是

com.google.maps/index.html )

 

而Column則是另外一種存法:family:qualifier

(冒號就是用來表示這個關係式的)

BigTable用一種很酷炫的column存法:column family

也就是將相似特性的欄位合併為一個family

如此一來在分析某種特性的時候就可以一次拿出全部

以之前的例子來說 anchor就組成一個column family

 

最後一個是timeStamp

其實就是表示這個資料的時間

若剛剛的content的內容有好幾筆 <html></html>  <html></html>

那麼對於每一筆資料都會有個timeStamp去紀錄

這樣就可以保存好幾份不同時間的資料

 

...待續

arrow
arrow
    全站熱搜

    austintodo 發表在 痞客邦 留言(0) 人氣()