iT邦幫忙

2025 iThome 鐵人賽

DAY 1
1
Software Development

資料庫大哉問系列 第 1

Day1 - 資料庫大哉問 (為什麼要深入學資料庫?)

  • 分享至 

  • xImage
  •  

資料庫為大多軟體系統的核心基礎建設,身為軟體工程師,學習程式語言之後,第二個學習技術非資料庫莫屬,但除了 SQL & Transaction 等基礎知識外,學習底層架構以及設計原理也非常重要!

我會用 SQL 就好了啊!為何要懂那麼多?

不懂原理前,你可能認為優化查詢就是加 Index,但其實 Index 欄位宣告順序很重要,另外 Transaction 執行太久也會影響整個 DB 查詢效能。

不懂原理前,你可能覺得併發時加 FOR UPDATE 就不會 race condition 了,但其實亂加 FOR UPDATE 可能 Deadlock ,甚至 Lock 整張 Table,有時甚至不加 FOR UPDATE 也會 Deadlock。

不懂原理前,你可能覺得資料庫會 MySQL or PostgreSQL 就好了,但其實 MySQL & PostgreSQL 有各自的侷限性,當資料變多或不同商業需求時,需搭配不同類型資料庫來完成。

也就是說,了解資料庫原理除了讓你寫 SQL 時更安心,還能在系統設計時了解不同資料庫的 trade off,設計出更完整的架構!

那到底要學什麼?

資料庫操作其實就是讀跟寫,但光這兩個操作就能衍生出許問題,例如:

  • 加了索引查詢還是很慢怎麼辦?
  • 後台產生報表 SUM 跑太久,影響用戶功能怎麼辦?
  • Transaction 執行太久要怎麼檢查是不是有 Deadlock?
  • 資料越來越多,查詢越來越慢怎麼辦?
  • 使用分散式架構,要怎麼實現分散式 Transaction?
  • PostgreSQL & MySQL 讀寫性能誰比較好?

為了回答上面的問題,你需要知道

  • 「資料庫都用什麼資料結構儲存資料」,因為不同結構有不同的查詢跟寫入效能
  • 「Transaction ACID 如何實現」,因為直接影響了 Transaction 併發效能和鎖的範圍
  • 「分散式資料庫架構原理」,因為隨著資料越來越多,單台資料庫肯定無法負荷
  • 「不同類別資料庫的原理」,因為每個資料庫設計有他的局限性,了解不同資料庫設計原理跟目的能在系統設計時找出最適合的架構

所以「資料庫大哉問」系列會寫什麼內容?

這系列已 MySQL 為主,其他資料庫為輔介紹資料庫設計原理,雖是 MySQL 為主,但很多概念是通用的,例如 Page & B+Tree & WAL & MVCC & Lock 等。

這個系列會分成七大段落:

  1. MySQL 儲存結構介紹
  2. MySQL 查詢效能優化方式
  3. MySQL Transaction ACID 原理
  4. MySQL Master-Slave 架構
  5. 分散式資料庫設計
  6. PostgreSQL 架構與 MySQL 的比較
  7. 其他資料庫用途以及儲存結構介紹

每個段落會用問題引導讀者,一邊閱讀一邊思考,化被動閱讀成主動學習,希望大家讀完後能對資料庫原理有更深的領悟。

開始理解資料庫原理就是邁向資深的第一步,一起來成為厲害的工程師吧!

About Me
歡迎大家追蹤我的 Thread,平常會在上面分享技術文章
https://www.threads.com/@chill.vic.22


下一篇
Day2 - MySQL 如何儲存資料?(InnoDB & Tablespace)
系列文
資料庫大哉問3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言