軟體工程是 權衡取捨(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 每秒會有大量的監控數據儲存和查詢