初步認識分散式資料庫與 NoSQL CAP 理論

  • 一個服務在一台電腦運行
  • 多個服務在一台電腦運行
  1. 單機能力的提升是有極限的
  2. 單點故障的風險(Single Point of Failure): 若只依靠單機運行,假設今天資料庫的主機掛了,你的服務也就 GG 了。換句話說就是缺少容錯能力,無法在維持服務的前提下升級。

嘗試開很多個機器跑同一個服務,也就是採用分散式架構

  • 來自 client 的請求可以分配到這幾台主機之一,減緩單一主機的壓力。
  • 因為第一點,某種程度降低了服務的等待時間。
  • 提高了系統的容錯能力,即是一個分區容錯(Partition Tolerence)的系統,當節點間通訊失敗也不會影響系統正常運作。
  • 採用分散式架構後,甚至可以在不同地理區域就近服務使用者。

這種增加節點的擴容方式,被稱作水平擴展(Horizontal Scaling)

  • Consistency 一致性 : 保證在各個有儲存資料的分區都一定拿得到最新版本的資料。
  • Availability 可用性:當存取資料庫時一定可以拿到資料,不會出錯(不會出現拿不到資料的狀況,但拿到的資料不保證是最新版本。)
  • Partitioning Tolerance 分區容忍:文章前段有提及,即使任一節點發生錯誤,整個系統還是能正常運作。

答案是沒辦法。讓我們來看看 CAP 理論是什麼。

CAP 理論

圖片來源

幾種 CAP 的組合

AP Database — 犧牲一致性的分散式資料庫

CP Database — 犧牲可用性的分散式資料庫

CA Database — 犧牲分區容忍性的資料庫

Scaling & Availability

NoSQL 解決了什麼問題?

  • 容易擴展的設計架構,由於資料沒有關聯性,因此相較於 RDBMS 更易於 scaling。
  • 簡單快速的達到高可用性(HA): Hash Function: O(1), Distributed Hash Funciton: O(log n)
  • 容易進行 Schema 的變更,因為根本沒有 Schema,適合時常變更架構的系統。

然而,老樣子,沒有絕對完美的事情,NoSQL 一樣存在缺點。

NoSQL 的缺點

  • 沒有固定的 Schema : 這點其實嚴格來說可以是優點也可以是缺點,得看需求來定論。
  • 關聯式資料庫常見的 Transaction 與 JOIN 也就非常難在 NoSQL 實踐。
  • 資料量不夠大時,其實效能普遍比 RDBMS 來要差

小結

--

--

什麼都想學的雜食性軟體工程師 🇹🇼 (https://github.com/kylemocode) 合作與聯繫 📪 oldmo860617@gmail.com

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
莫力全 Kyle Mo

莫力全 Kyle Mo

什麼都想學的雜食性軟體工程師 🇹🇼 (https://github.com/kylemocode) 合作與聯繫 📪 oldmo860617@gmail.com