系統架構 & 資料庫結構 筆記


Posted by YongChenSu on 2020-12-08

系統架構

  1. 系統架構的根本,避免一個東西掛掉就全部掛掉
  2. 當系統變大的時候如增加效率 (兩台資料庫之間同步資料)

單點故障

single point of failure

資料庫結構

NoSQL

Not Only SQL

  • 沒有 shema
  • 可以想像成 json 資料存進 DB
  • 用 key-value 儲存
  • 通常儲存結構不固定的資料 (log)

Transaction 交易

  • 實際應用

    1. 轉帳
    2. 購物
    3. 其他一次牽扯多個 query 的操作
  • ACID
    為保證 transaction 的正確性

    1. atomacity 原子性:要嘛全部失敗,要嘛全部成功。
    2. consistency 一致性:維持資料的一致性(錢的總數相同)。
    3. isolationl 隔離性:多筆交易不會互相影響(不能同時改同一個值)。
    4. 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 便處理掉超賣的情況

缺點:
效能上會較低,因在某一行便鎖住


#程式導師實驗計畫第四期 #前端 #databse structure







Related Posts

[C#] Asp.net Mvc 使用 AntiForgery

[C#] Asp.net Mvc 使用 AntiForgery

React-[建立開發環境篇]-安裝vite & 將vite專案打包並部署

React-[建立開發環境篇]-安裝vite & 將vite專案打包並部署

如何不用英文字母與數字寫出 console.log(1)?

如何不用英文字母與數字寫出 console.log(1)?


Comments