AWS ch05 一開場就直接比較 RDS、Aurora、DynamoDB、ElastiCache——但如果不知道「關聯式和 NoSQL 差在哪」「交易是什麼」「索引為什麼快」「讀寫分離解決什麼」,那些比較表就只是背誦。本章用轉帳、書的目錄、影印分身三個類比把地基打好,最後講清楚 DynamoDB 考點裡的「強一致 vs 最終一致」。
關聯式資料庫(Relational Database)可以想成「一堆設計嚴謹、會互相參照的 Excel 表」:
SELECT 姓名 FROM 客戶表 WHERE 城市 = '台北'(從客戶表挑出台北的客戶姓名)。強項是跨表查詢(JOIN):「找出上個月買過 A 商品的台北客戶」這種跨好幾張表的複雜問題,一句 SQL 搞定。經典場景:A 轉 1000 元給 B = 兩個動作(A 扣款、B 入帳)。如果扣完款系統當機、B 沒收到錢——災難。交易(Transaction)就是把多個動作捆成「不可分割的一包」:要嘛全部成功,要嘛全部沒發生,不存在中間狀態。
資料庫扛不住流量時,有一個關鍵觀察:大多數應用「讀」遠多於「寫」(看商品頁的人遠多於下單的人)。所以:
NoSQL 是一大類「不走關聯式路線」的資料庫統稱,最常見的兩種:
取捨的本質:NoSQL 放棄了關聯式的兩大重武器——跨表 JOIN 和完整 ACID 交易——換來無上限的水平擴展和穩定的毫秒級速度。所以:
資料為了安全與效能會複製好幾份(複本、多 AZ),於是出現一個新問題:剛寫入的資料,馬上去讀,每一份都已經同步了嗎?
| 特性 | SQL / 關聯式 | NoSQL(Key-Value / 文件) |
|---|---|---|
| 類比 | 嚴謹的會計帳本(表格互相參照) | 巨大置物櫃 / 自由筆記本 |
| Schema | 事先定義,嚴格把關 | 彈性,每筆欄位可不同 |
| 查詢能力 | SQL、跨表 JOIN、複雜查詢 | 主要靠 key 與索引取資料 |
| 交易 | 完整 ACID | 有限度支援 |
| 擴展方式 | 垂直為主(換大機器)+讀複本 | 水平擴展近乎無上限(加節點) |
| 適用場景 | 金融、訂單、庫存、複雜報表 | 海量簡單存取、毫秒級延遲、Session、購物車 |
| AWS 服務 | RDS、Aurora | DynamoDB(KV)、DocumentDB(文件)、ElastiCache(記憶體 KV) |
| 面向 | Read Replica(讀寫分離) | Multi-AZ(高可用) |
|---|---|---|
| 目的 | 分攤讀流量=效能 | 主庫掛了有人接手=可用性 |
| 複本收流量嗎 | 收(服務讀取請求) | 平常不收,純待命 |
| 同步方式 | 非同步(有複本延遲→最終一致) | 同步(資料零遺失) |
| 考題觸發詞 | 「讀取流量太大」「報表查詢拖慢主庫」 | 「AZ 故障仍要運作」「自動容錯移轉」 |
點擊卡片翻面查看答案,共 10 張。