NoSQL入門介紹及主要類型資料庫說明
傳統的關聯式資料庫(RDBMS)需透過資料庫叢集技術,處理龐大資料量的問題,需要花費高額的硬體設備且分散式的架構以致儲存效率不佳。NoSQL資料庫便是在面對此問題而發展出來的解決方案,它在架構上可以相對簡單的水平擴充,且打破Schema欄位架構的限制,解決龐大資料的異動困難,因此在巨量資料的管理及分析上也能有較佳的效率、相對低的成本。
許多的社交軟體、社交遊戲,例如社交軟體Facebook、Instagram、Twitter...等,為了處理每日大量的資料量,便是以NoSQL資料庫來面對在效能與擴充彈性的需求。
[NoSQL資料庫類型]
從資料模型的角度來看,現有的NoSQL資料庫主要有為四個類型:
文件導向資料庫 Document Oriented Database
l 應用場景:Web HTML, 網頁資料
l 著名實作:MongoDB、CouchDB、RavenDB等
l 說明:
- 將XML或JSON文件導入NoSQL概念中,採用這兩種格式作為儲存資料的方式。
- 在關聯式資料庫中主要以Table(表格)的方式儲存資料,而資料則稱為Row(列); 文件導向資料主要以Collection(集合)的方式儲存資料,資料被稱為Document(文件)
- 關聯式資料庫vs. 文件導向資料庫 示意圖
(圖片來源: 7天學會大數據處理資料NoSQL-MongoDB入門與活用)
鍵值資料庫 Key-value Oriented Database
l 應用場景:記錄檔系統、快取常用網頁
l 著名實作:Redis(Flickr使用)、Memcached、Dynamo
l 說明:
- 每一筆資料包含一組鍵值(key-value),在key與value間建立映射關係,透過key可以直接存取value。
- 在關聯式資料庫中主要以Table(表格)儲存資料,而資料則稱為Row(列); 鍵值資料庫以Bucket(桶)的方式儲存資料,資料被稱為key-value(鍵值)。
- 關聯式資料庫vs. 鍵值資料庫 示意圖
(圖片來源: 7天學會大數據處理資料NoSQL-MongoDB入門與活用)
列式資料庫 Column Oriented Database
l 應用場景:分散式檔案系統、高擴充能力
l 著名實作:Cassandra(Facebook使用)、Google Big Table、Hadoop Hbase
l 說明:
- 以列儲存,將同一資料列儲存在一起。在一張大資料表中儲存很多行資料,每一行的結構同樣有一個主要Key值和任意數量的列欄位。
- 在關聯式資料庫中主要以Table(表格)的方式儲存資料,而資料則稱為Row(列); 列式資料庫以Column Family(欄位群)的方式儲存資料,資料被稱為row(列)。
- 關聯式資料庫vs. 列式資料庫 示意圖
(圖片來源: 7天學會大數據處理資料NoSQL-MongoDB入門與活用)
圖形資料庫 Graph Oriented Database
l 應用場景:社交網路、關係圖譜
l 著名實作:Neo4j、Hyper GraphDB、FlockDB(Twitter使用)
l 說明:
- 運用圖結構的概念來儲存資料,並運用圖結構相關演算法提高性能,不是專門用來處理圖片的資料庫。例如用樹狀結構來組織從屬關係或網狀結構來儲存朋友關係,地理圖資系統通常也會用圖形資料庫來儲存地圖上每一點和鄰近點的關係,或用圖形資料庫來計算點與點之間最短的距離,也可以用同樣的概念來計算出人與人之間最短的交友距離。圖形資料庫最大的特性是對複雜性的擴充力,關係越複雜的資料越適合使用圖形資料庫。
- 在關聯式資料庫中主要以Table(表格)的方式儲存資料,而資料則稱為Row(列); 圖形資料庫以Node(節點)的方式儲存資料,資料被稱為Attribute(屬性)。
- 關聯式資料庫vs. 圖形資料庫 示意圖
(圖片來源: 7天學會大數據處理資料NoSQL-MongoDB入門與活用)
NoSQL的特性說明
1.NoSQL的出現在於能滿足Big data處理所需要的3V特性:
Velocity(速度) - 可在一定的時間內完成查詢操作
Variety(多樣資料格式) - 網路上的資訊多半是半結構化、非結構化居多,無法事先定義資料類型,NoSQL的出現即是為了方便處理這類型的資料。
Volume(資料量) - 分散式運算架構可以處理大量資料
2.交易處理特性--NoSQL架構採用了CAP資料庫理論:
傳統關聯式資料庫採用的交易(Transaction)的設計採用ACID理論,為確保交易(Transaction)是正確可靠的,所以必須具備四個特性,Atomicity (原子性)、Consistency (一致性)、Isolation (隔離性)、Durability (持續性)。
- 原子性 atomicity:單一筆交易 若不是全部失敗,就是全部成功
- 一致性 consistency:異動過程確保整體資料庫的一致性
- 隔離性 isolation:多筆交易不會互相影響(不能同時改同一個值)
- 持久性 durability:交易成功之後,寫入的資料是永久的
但ACID架構的資料庫擴充不易,而NoSQL參考了CAP資料庫理論:包括資料一致性(Consistent)、可用性(Availability)和中斷容忍性(Partition Tolerance)。理論上無法同時兼顧CAP這三種特性,所以,NoSQL資料庫通常會選擇其中兩種特性來設計,通常是選擇CP或AP。
NoSQL資料庫採取Eventually Consistency(資料遲早會一致)的作法,因為NoSQL的分散式架構設計,資料分散複製到不同節點中,每個節點各自也能異動資料,同步過程就會有時間落差,會發生資料不一致的情況。這部分就需要開發者另外處理,解決資料衝突或遺失的問題。或用NoSQL資料庫來記錄那些對精確度要求較低的資料,例如Facebook的讚數,即使少了幾個讚的記錄,使用者也不容易發現,就適合用NoSQL資料庫來儲存。因此在決定是否使用NoSQL資料庫時,得先評估資料及交易的性質,是否能承擔資料遺失/不一致,或是自身具有另外處理的能力。
3. Not only SQL
RDBMS與NoSQL DB各自其實都有其特性,因此兩者的存在並不是要取代或是被取代,反而是可以透過這兩者的特性視需要混合使用來產生最大的效益。
參考資料:
1.7天學會大數據處理資料NoSQL-MongoDB入門與活用
2. https://angelyeah.pixnet.net/blog/post/381381311