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去紀錄
這樣就可以保存好幾份不同時間的資料
...待續