Table of Content
Introduction
資料庫是資料的電子存儲,系統的收集。它可以包含任何類型的資料,包括單詞,數字,圖像,視頻和文件。
資料庫的分類
關聯式資料庫( RDBMS )
- 資料庫是由多個資料表( Table )所組成,並且可以將資料表關聯起來,去連結多個資料表之間的關係
- 由資料表( Table )組成,其中 row 代表一筆資料,column 代表資料欄位名稱
- Schema 必須先定義好,並且只接受同樣格式資料的插入與修改
- 具備 ACID 特性
非關聯式資料庫(NOSQL)
- 不需要定義 schema 、沒有關聯的關係
- collection 中每筆資料為一份 document,document 的資料格式不需一致
- 以 CAP theorem 為概念設計
| 關聯式資料庫 | 非關聯式資料庫 |
---|
Example | MySQL, PostgreSQL | MongoDB, CouchDB |
組成 | table | collection |
資料 | row-column | document |
特性 | ACID | CAP |
ACID
- Atomicity(原子性):只會是全部執行或全部尚未執行的其中一種狀態
- Consistency(ㄧ致性):交易前後資料的完整性受到保持,例如透過定義 Model Schema
- Isolation(隔離性):交易執行時,其他使用者看不到正在處理的資料,也不會受到影響
- Durability(持久性):交易完成後將永久被儲存
CAP
- 一致性(Consistency):使用者讀到的”總是”最新的資料
- 可用性(Availability):使用者的請求”總是”可以獲得回應,也就是可以正常讀寫(回傳錯誤訊息並不算滿足可用性)
- 分區容錯性(Partition tolerance):就算網路出現問題導致資料分區,整個系統仍然要可以繼續運作
在分散式系統中,這三個特性只能同時滿足兩個 (CP, AP)
最終一致性(eventually consistency)。當使用者更新某筆資料時,也許因為網路暫時中斷或延遲,沒有即時同步到另一個資料庫。我們還是讓其他使用者可以繼續存取資料(不是最新的也沒關係),但最終,我們保證這筆資料一定會同步(最後的結果還是對的)
什麼時候要用 RDBMS/NOSQL?
必須依照使用情境與需求,分析 RDBMS & NOSQL 的特性,進而去選擇最適合的資料庫來使用。
- RDBMS: 擁有ACID特性,保證了資料的一致性。舉例在金融類型的應用
- NOSQL: 擁有CAP特性,適合資料更新可以有一點延遲的場合,例如文章的新留言、影片總共觀看人數