系統架構
- 系統架構的根本,避免一個東西掛掉就全部掛掉
- 當系統變大的時候如增加效率 (兩台資料庫之間同步資料)
單點故障
single point of failure
資料庫結構
NoSQL
Not Only SQL
- 沒有 shema
- 可以想像成 json 資料存進 DB
- 用 key-value 儲存
- 通常儲存結構不固定的資料 (log)
Transaction 交易
實際應用
- 轉帳
- 購物
- 其他一次牽扯多個 query 的操作
ACID
為保證 transaction 的正確性- atomacity 原子性:要嘛全部失敗,要嘛全部成功。
- consistency 一致性:維持資料的一致性(錢的總數相同)。
- isolationl 隔離性:多筆交易不會互相影響(不能同時改同一個值)。
- durability 持久性:交易成功後,寫入的資料不會不見。
$conn->autocommit(FALSE);
$conn->begin_transaction();
$conn->query("UPDATE FROM money SET amount = 20");
$conn->query("UPDATE FROM money SET sun = 10");
$conn->commit();
innoDB 型態支援 transaction
MyISAM 型態不支援 transaction
race condition
若有兩筆以上的 query 同時抵達 server,在購物網站上若商品數量不足,就有可能發生「超賣」的情況。lock 鎖
for update
$conn->autocommit(FALSE);
$conn->begin_transaction();
$conn->query("SELECT products for update");
$conn->commit();
優點:
可在 database 便處理掉超賣的情況
缺點:
效能上會較低,因在某一行便鎖住