Professional Documents
Culture Documents
雲端運算
ccy
TKU CSIE DB Lab
2011/1/9
目錄
雲端運算定義 .......................................................................................................................................................... 2
2. 增加機器就能自動擴充資料庫容量 ................................................................................................ 3
4. 資料遲早會一致.............................................................................................................................. 4
5. 成熟度不足,版本升級風險高 ................................................................................................... 5
1. Key-Value ............................................................................................................................................ 6
2. 記憶體資料庫 .................................................................................................................................... 7
3. 文件資料庫 ........................................................................................................................................ 7
4. 圖學資料庫 ........................................................................................................................................ 8
1
雲端運算定義
主體是所有連接網路的實體,可以是人、設備和程式,客體是我們現在接觸到的以及不久將
來會出現的各種資訊服務。
硬體和軟體都是資源並被封裝為服務,使用者可以透過網路依其需求來使用。在雲端運算中,
工作通常運行在遠端的分散式系統上,而非本地端電腦或單一伺服器上。
Facebook、Google、Twitter 這些國外大型網站,為了解決資料庫大量資料存取的問題,近年
來紛紛捨棄了關聯式資料庫技術,改以 NoSQL 資料庫來提升效能與擴充彈性;在臺灣,開發社
交遊戲的力可科技,也因為關聯式資料庫無法應付每日 2GB 的資料量增長,而改採 NoSQL 資料
庫來解決資料庫寫入暴量的問題。面對社交型態的網站興起,NoSQL 儼然成為資料庫的一股新威
力。
網站業者為了解決如 TB 等級甚至是 PB 等級的巨量資料儲存和擴充問題,開始研發各種建置
成本較低的分散式開源資料庫,Google 自行研發的 BigTable 就是其中最好的例子。其他如 Amazon、
Yahoo 近幾年也都投入這類 NoSQL 資料庫的研發。甚至連微軟的 Azure 雲端平臺也使用了 NoSQL
技術來存取資料。同樣情況,像 Facebook、Twitter、Zynga 這類社交型網站為了解決龐大的使用
者互動資料,也大量使用 NoSQL 資料庫技術。例如 Facebook 開發出 Cassandra 資料庫,在 600
多個運算核心的叢集系統上,儲存了超過 120TB 的站內郵件。
2
What is NoSQL?
NoSQL 資料庫是分散式非關聯式資料庫統稱的名詞,泛指哪些非關聯式資料庫的資料庫技術,
包括了數十種不同類型的資料庫系統,這些資料庫大多沒有支援標準的 SQL,例如知名的 Google
BigTable、Amazon S3 的 Dynamo 資料庫,或是微軟 Azure 平臺儲存資料的方式,都屬於 NoSQL
資料庫的其中一種。NoSQL 不像關聯式資料庫那樣有一套通用的基礎資料庫理論。導入 NoSQL 資料
庫的第一個挑戰是要拋棄原有的 SQL 觀念,學習新的資料存取方法。大約有以下描述:
2.增加機器就能自動擴充資料庫容量
NoSQL 資料庫的另一個重要特性是具有水平擴充能力,只要增加新的伺服器節點,就可以
不斷擴充資料庫系統的容量。而且可以利用低價的一般等級電腦就能進行水平擴充,不像關聯
式資料庫的叢集系統往往需要效能和容量較大的伺服器才能勝任。NoSQL 資料庫可以用更低的
成本打造出 TB 等級或 PB 等級的大型資料庫系統。有些 NoSQL 資料庫甚至可以在不停機或不影
響應用程式的情況下,線上就能直接擴充資料庫系統的容量。 簡單來說,水平擴充能力的意思
就是只要增加新的伺服器設備,就能自動增加資料庫的容量,從管理角度來看,這也可以減少
長期維護資料庫的人力。
3
3.打破 Schema 欄位架構的限制
4.資料遲早會一致
為了確保資料的完整性,關聯式資料庫採用的交易(Transaction)的設計,讓資料存取或異
動過程中不會受到干擾。Transaction 資料庫的特性就是 ACID,在 SQL 執行過程中,確保有交易
作為最小運作單位(Atomicity)
、異動過程確保整體資料庫的一致性(Consistency)
、執行多筆交
易時能隔離交易中的資料不受其他交易影響(Isolation)以及交易過程不會變動原始資料的持久
性(Durability)
。但是 ACID 架構的資料庫擴充不易,所以,NoSQL 資料庫大多沒有交易的設計,
而是採用了另外一個不同的 CAP 資料庫理論。CAP 理論有三個關鍵,包括資料一致性(Consistent)、
可用性(Availability)和中斷容忍性(Partition Tolerance)
。理論上無法同時兼顧 CAP 這三種特性,
所以,NoSQL 資料庫通常會選擇其中兩種特性來設計,通常是選擇 CP 或 AP。多數 NoSQL 資料
庫選擇的是 CP 的設計,不過,NoSQL 資料庫中談的資料一致性和關聯式資料庫的意義不同。
NoSQL 資料庫會採取 Eventually Consistency(資料遲早會一致)的作法,因為 NoSQL 的分散式設
計會將資料分散複製到不同節點中,每個節點各自也能異動資料,然後再彼此同步。同步過程
就會有時間落差,若同時讀取不同節點上的資料,會發生資料不一致的情況。 NoSQL 資料庫為
了保持分散式的擴充架構,容許這樣的情況,只有保證最後資料會達到一致。而在資料尚未同
步的短暫時間內就需要開發者自行解決資料衝突或遺失的問題,或者是用 NoSQL 資料庫來記錄
那些對精確度要求較低的資料,例如 Facebook 的贊按鈕,即使少了幾個贊的記錄,使用者也不
容易發現,就適合用 NoSQL 資料庫來儲存。導入 NoSQL 資料庫時,開發者得先評估資料的性質,
是否能承擔資料遺失的風險。
4
5.成熟度不足,版本升級風險高
NoSQL 的種類
早在 NoSQL 資料庫這個名詞流行之前,就已經出現了很多種非關聯式資料庫,這些資料庫
各有不同的特徵,很難像關聯式資料庫那樣,用一套共同的觀念就可以全部了解。只能逐一了解
每個 NoSQL 資料庫的特性和用途。目前有 4 種比較受到關注的 NoSQL 資料庫,分別是 Key-Value
資料庫,記憶體資料庫(In-memory Database)
、圖學資料庫(Graph Database)以及文件資料庫
(Document Database)
。
5
1.Key-Value 類型(最多)
6
2.記憶體資料庫
3.文件資料庫
文件資料庫主要是用來儲存非結構性的文件,例如最常見的非結構化資料就是 HTML 網
頁。一個 HTML 網頁結構不像一般表格那樣有固定的欄位,每個欄位有特定資料類型和大小。
例如網頁裡有 Head 和 Body 結構,Body 元素中可能會有 10 個段落,段落中會有文字、連結、
圖片等。文件資料庫的資料結構往往是鬆散的樹狀結構。很多文件資料庫都是商用資料庫系
統,文件資料庫的概念源自 IBM 的 Lotus Notes 儲存文件的方式,XML 資料庫也是一種文件
資料庫。常見的開源文件資料庫像是 CouchDB、MongoDB 以及 Riak 等。隨著網頁儲存和搜
尋索引的需求大增,CouchDB 和 MongoDB 這 2 款文件資料庫越來越受到關注。2005 年就出
現的 CouchDB 剛釋出了 1.0 版,它也是 Apache 基金會維護的頂級計畫之一。CouchDB 提供
了一套 RESTful 的 API,讓應用程式透過 HTTP 協定就能存取資料庫,也可以用 JavaScript 作
為查詢語言。2009 年才出現的 MongoDB 很快就已經釋出穩定的 1.6.1 版,可以用來儲存 UTF-8
和非 UTF-8 的文件資料。不像 CouchDB 只能儲存 UTF-8 格式的文件。MongoDB 同樣可以在
查詢指令中使用 JavaScript。採取 Master-Slave 架構,1 臺 Master 伺服器搭配多臺資料伺服
器,資料伺服器間互相備援、容錯。
7
4.圖學資料庫
最後一類是圖學資料庫,這不是專門用來處理圖片的資料庫,而是指運用圖學架構來儲
存節點間關係資料架構,例如用樹狀結構來組織從屬關係或網狀結構來儲存朋友關係,地理
圖資系統通常也會用圖學資料庫來儲存地圖上每一點和鄰近點的關係,或用圖學資料庫來計
算點與點之間最短的距離,也可以用同樣的概念來計算出人與人之間最短的交友距離。圖學
資料庫最大的特性是對複雜性的擴充力,關係越複雜的資料越適合使用圖學資料庫。這類資
料的資料結構沒有標準的作法,基本的圖學資料包括了節點(Node) 、關係(Relation)和屬
性(Property)三種結構。例如用節點來記錄 Facebook 上的帳號、用關係來記錄朋友關係、
用屬性來描述這個帳號的個人資料等。最後可以用網絡圖來呈現出 Facebook 用戶之間的交
友狀況。常見的圖學資料庫如 Neo4j、InfoGrid、AllegroGrph 等。
NoSQL 實際案例
8
力可科技採取混用的作法,將成長速度最快、檔案最大的幾個資料表,搬移到 NoSQL 的分
散式資料庫中,其餘資料表則是還儲存在免費的 MySQL 資料庫中。用 NoSQL 解決龐大資料的擴
充需求,另一方面則能保留用 SQL 語法來查詢其他資料的便利性。
除了資料讀取衝突外,寫入時也會發生衝突。因為社交遊戲是多人同時進行,可能會發生 2
個使用者同時寫入到同一筆資料的情況,或者是有 1 個人寫入資料時,另一個人正要讀取該筆資
料。這也會造成兩個使用者拿到不同的資料,或者是只有其中 1 個人的資料成功寫入。
9
因為 NoSQL 資料庫沒有 SQL 資料庫的「交易」 (Transaction)設計,在資料異動過程中,NoSQL
資料庫不會鎖住資料來阻止其他寫入或讀取動作,所以會發生資料衝突,造成資料錯誤或遺失。
像 Cassandra 的設計就是採取 Eventual Consistency 的原則,經過一段時間資料沒有更新時,分散
的各版本資料終究會達成一致,所以,力可導入 Cassandra 資料庫的過程中,每天上百萬次的資
料存取總會遇到幾次資料衝突的情況,力可表示,開發者必須自行解決這些原本在 SQL 資料庫中
會自動處理的問題。像金錢這類資訊比較適合關聯式資料庫,若要使用 NoSQL 資料庫,就需要
特別處理資料一致性的問題。
Cassandra 最大的優點是可以降低維護成本。使用者貢獻比例高的網站資料量通常很大,成
長速度也很快。若要採用 MySQL 來滿足資料庫不斷擴充的需求,往往每隔一段時間就要會遇到
資料庫空間不足,甚至得有專人負責切割和轉移資料庫。
10