Skip to main content

Command Palette

Search for a command to run...

#databases

Articles tagged with #databases

  1. Lesson 24: 資料庫擴展術-讀寫分離、複寫機制與快取一致性挑戰

    為什麼要讀寫分離? 大多數的 Web 應用都是 「讀多寫少」(例如:看文的人多,發文的人少,Heavy Read System)。當所有的請求都塞給同一台資料庫時,磁碟 I/O 和連線數會成為瓶頸。 Master (主庫): 負責寫入 (Insert/Update/Delete),確保數據一致性。 Slave (從庫): 負責讀取 (Select),可以有多個從庫來分擔讀取壓力。 為什麼讀

    Mar 25, 20262 min read60
  2. Lesson 6: 悲觀與樂觀:資料庫鎖 (Locking) 機制與並發處理

    在上一篇文說到了:三種讀取異常,也介紹了四種隔離等級,如果是第一次接觸到這些概念的人一定會有疑問: Q:既然 RR 已經保證『可重複讀』了,為什麼搶票系統還是會超賣?資料庫不是隔離了嗎? A:隔離級別(透過 MVCC)通常只保證「你看得到的資料」是一致的(快照),但它擋不住多個人同時對同一筆資料進行「寫入」 回到搶票案例: A 讀取 (Select):MVCC 給了 A 一張「剩餘 1 張」的照片。 B 讀取 (Select):MVCC 給了 B 一張「剩餘 1 張」的照片。 A 寫入 (...

    Dec 7, 20254 min read14
  3. Lesson 5: 避免資料打架-Transaction 交易處理 (ACID) 與 Race Condition

    身為後端的我們,很常聽到:這裡要用交易、這不符合ACID原則…等。這篇文章主要來探討:Transition的用法與ACID的概念。 ACID ACID 原則是Transition時應具備的四個特性縮寫,分別是原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability) 原子性 「要就全部成功,否則全部失敗」。 如果交易中有 10 個步驟,執行到第 9 步失敗了,資料庫必須 Rollback(回滾) 到第 1 步還沒執行前的狀態,不能...

    Dec 6, 20253 min read12
  4. Lesson 4: 效能殺手與救星-Index 索引的原理、複合索引與 Explain 分析

    我們很常聽到索引(Index),大部分工程師也都知道 RDBMS最基本的加速方式就是加上Index,但Index是個雙面刃,加的不好反而會嚴重拖累DB的速度,我們這個章節就來探討,Index的概念以及實務上的用法吧! 為什麼我們需要索引? 想像一本厚達 1,000 頁的字典。 沒有索引 (Full Table Scan): 如果你想查「Apple」這個字,卻沒有目錄也沒有頁碼順序,你必須從第一頁翻到最後一頁,直到找到為止。這在資料庫中叫做 全表掃描 (Full Table Scan),是效能殺...

    Dec 5, 20255 min read9
  5. Lesson 3: 資料庫設計美學-Schema 設計、正規化 (3NF) 與欄位型態的陷阱

    在上一篇文章中介紹了常見的RDBMS、NoSQL以及其相關特性。 現在我們要針對最常使用的RDBMS來探討 關於:Schema、正規化、ACID原則…等。 Schema 關聯式資料庫的其中一個概念就是:table與table之間存在著某些關聯。以下會是幾個我在審閱ERD設計或者DB規劃的時候會特別注意到的點: 關於table name的命名 在 Laravel (以及大部分的 RDB 設計習慣)

    Dec 4, 20253 min read26
  6. Lesson 2: 資料儲存的抉擇:RDBMS vs NoSQL

    關於RDBMS(關聯式資料庫) 網路上有超多文章說明關聯式資料庫,簡單來說 關聯式資料庫就像是我們在Excel上面拉的表單,比如:會員資料表,我們在Excel上把對應的欄位標題(有點像前端的table-head , <th>)定義好,就是完成最基本的關聯式資料庫設計。每一筆資料就是一個row(就像是前端的table-data, <td>),這就是資料表(table)。 最常見的RDBMS:MySQL 以及 PostgreSQL。 MySQL vs PostgreSQL 在我身邊越來越多開發者,棄...

    Dec 3, 20251 min read12