[DB] RDBMS 淺談

參加 Triton Ho 的 RDBMS 淺談 的一些筆記 簡報連結 1. 為何選擇 RDBMS 歷史悠久, 社群支援度良好, 基本上不會有太大的問題 比 NoSQL 有更快的發開速度 對於一般中小型系統, 效能足夠了 更加安全 快速開發 大部分系統 multiple records atomicity 不能避免的需求 (e.g. 把錢從用戶 A 轉到用戶 B、購買虛擬道具) 支援多種資料型態 支援十進制的 numeric, 在計算金錢數值時特別有用 中小型系統(資料量 < 100GB »

[DB] 正規化 (normalization)

正規化的目的在於減少資料重複、增加資料一致性 正規化又分為 第一階正規化  (First Normal Form, 1NF) 第二階正規化  (Second Normal Form, 2NF) 第三階正規化  (Third Normal Form, 3NF) BC正規化    (Boyce–Codd Normal Form, BCNF) 第四階正規化  (Fourth Normal Form, 4NF) 第五階正規化  (Fifth Normal Form, 5NF) 第六階正規化  (Sixth »

[DB] partition 與 sharding 不同

partition 是將一個 table 的資料,分割放置到多個 table 缺點: 雖切割成多 table,但還是在同一台 database 內。資料庫的效能仍受限於該台資料庫所能提供之 throughput sharding 是將一個 table 的資料放到多個 database 缺點: 資料散落在不同的 database,資料查詢變得很複雜 (e.g. 無法 join、transaction 沒有 ACID) Ref: What’s MySQL partition MySQL »

[DB] Transaction 與 ACID

Transaction 一個 transaction 可以包含多種行為 (e.g. select、update、insert、delete) transaction 不保證會成功,select 也可能會 lock 寫程式時,transaciton 不一定只有寫入才會失敗 ACID 單元性 (Atomicity) 全部執行,或全部不執行 全部執行 => commit 全部不執行 => 一個 query 失敗,全部 rollback 成執行前狀態 一致性 (Consistency) 不管 »

[DB] MyISAM 與 InnoDB 差異

MyISAM MySQL 5.5 以前預設引擎 不支援 transaction,僅能使用 table lock table lock 不保證 ACID 的 Durability,有可能會掉資料 寫入時屬於 Exclusive Lock,其他人同時無法寫入與讀取 InnoDB MySQL 5.5 及之後預設引擎 支援 ACID 特性,當機後不會掉資料 (需設定參數) 寫入時屬於 MVCC,支援多人同時寫入與讀取 Ref: 【筆記-轉載】MyISAM 與 InnoDB 帶來的 »