關聯式資料庫 V.S. 非關聯式資料庫

軟體工程是 權衡取捨(Trade-off) 的選擇
NoSQL 優勢是高效能,但犧牲資料安全性和正確性(資料不一致或直接流失掉),反之,其他 SQL 有各種保護的機制,但犧牲效能

SQL Database

  • 比如 MySQL, Oracle, MsSQL
  • 統一使用 SQL commands,來控制和操作 Database
  • 遵循 ACID 原則,來保證 交易一致性 (Transcation)
  • 關聯式結構,可以使用 JOIN 合併資料表,搭配正規化,和反正規化
  • 增加處理能力時,運用 Vertical scaling,提昇主機的 CPU, Memory 等等

NoSQL Database

  • 比如 MongoDB, Cassandra …
  • 各家有不同的 API 或 SDK,來控制和操作 Database
  • 符合 CAP 理論,來達到 最終一致性 (Eventually Consistent)
  • Document 或 Key-Value 架構,資料為巢狀結構,並不需要預先定義格式
  • 增加處理能力時,運用 Horizontal scaling,藉由分散式系統來擴充 Node

沒有說一定要使用關聯式或非關聯式,好的情境用對方式,就會有如虎添翼效果,例如: NoSQL情境如下:

  • App Server 不太需要有 Transcation,Ex: 銀行轉帳、金流交易
  • 開發初期而且需求變化很快,DB schema 常常需要修改,不太好預先定義
  • 資料很短期,流失也無所謂,比如 Cache,Web session
  • 高流量或高容量的場域,比如說 IOT 每秒會有大量的監控數據儲存和查詢

沒有必須使用的資料庫,只有適合的情境

訂閱
通知
guest
0 留言
預約回饋
查看所有留言