iT邦幫忙

2023 iThome 鐵人賽

DAY 1
2
Software Development

CRUD仔的一生(上集)系列 第 1

[前言] 寫後端一定ipad資料庫

  • 分享至 

  • xImage
  •  

CRUD仔的一生(上)

前言

小時候老一輩的常說,"剛吃完飯不可以直接躺著,容易變成牛"。
是否有懷疑過為什麼是牛,為什麼不是貓咪?不是豬呢?
一個奇怪的追問,總是搞得大人一時間回不出來,便簡單的說明是老一輩的智慧。

直到自己真的開始反芻了,真的變成牛了,年少無知的自己才開始贊嘆老一輩的智慧;
原來是躺著時少了部分地吸引力向下的作用將食物推向胃,消化速度減慢,
消化系統來不及應付接下來的食物,造成胃食道逆流,就如同牛一樣反芻。

多了這層解釋,可以得知太空人吃完飯就算站著也容易變成牛,
所以太空人的食物必須使用特製太空食物。

場景拉回電腦工程相關的文章,
許多文章或部分書籍之中都在沒有任何前提下直接提出了定理,
完全沒有解釋為什麼要提出這個定理或者為了解決什麼困難。
若沒有多方的找尋原因,讀起來容易將科學變成玄學來解釋,便簡單的說明是老一輩的智慧。
優良的工程師,提出定理,但缺少理由,實在非常可惜;
因為當後人遇到一些定理無法解決的問題時,反而變成發展的天花板。

而後人真正造成遇到變化或不同場景時,不知道如何解決。
其實只要將定理的定義與存在的原因解釋清楚。
適當的理解思路,視時打破規局,才能寫出最符合狀況的程式(但並非憑空猜想)。

目標

身為小小的工程師的我,
回顧年少無知的自己多次變成電腦猴,踩了一次一次的錯誤後,
不經讚嘆老一輩的智慧與精妙,
希望能透過撰寫一些文章將一些許多文章沒解釋到與玄學部分補充說明為該領域多順一下思路。

為什麼選擇資料庫作為主要解釋對象呢?
因為後端工程師主要會面零許多currency problem與system design問題,
而其中最令筆者覺得可以一次接觸所有後端問題的系統就是資料庫系統,
好比永字八法般,筆畫雖不多,但寫好該字,就可以掌握8成的基礎書法字。
因此,選擇資料庫系統作為出發點,近一步了解後端工程。

CRUD仔的一生

該系列分為上下兩部,
CRUD仔的一生(上):
主要介紹單體式資料庫的運作原理與一些定理的註解,會特別注重資料結構。
CRUD仔的一生(下):
加入分散式資料庫的運作原理與定理解釋,會特別注重演算法與運作缺點。
這裡可能會是我人生中最猴的時刻QQ

目錄:

  1. [前言] 寫後端一定ipad資料庫
  2. [ACID]
    01. [ACID] 事務(Transaction)
    02. [ACID] SX鎖(SXLock)
    03. [ACID] 隔離層級(Isolation)
    04. [ACID] 顯式鎖(The Locking Clause)
    05. [ACID] 樂觀鎖(OptimisticLock)
    06. [ACID] 樂觀鎖(MVCC In Postgres)
    07. [ACID] 樂觀鎖(MVCC In MySQL)
    08. [ACID] 樂觀鎖(MySQL RR Problem)
    09. [ACID] Postgres WAL機制
    10. [ACID] Mysql WAL機制
    11. [ACID] 就是要ACID
    12. [ACID] 其實也不用ACID
    13. [ACID] 二階段提交(2 Phase Commitment (2PC))
  3. [CREATE]
    01. [CREATE] Heap/Index Organized Table
  4. [QUERY]
    01. [QUERY] OLTP/OLAP/HLAP
    02. [QUERY] Index
    03. [QUERY] SQL 規劃器/優化器(SQL Planner/Optimizer)
    04. [QUERY] 分頁問題(Paging Problem)
    05. [QUERY] IndexType: B+Tree
    06. [QUERY] IndexType: BRIN
    07. [QUERY] IndexType: GIST
    09. [QUERY] IndexType: GIN
    10. [QUERY] IndexType: GIN - Full Text Search (FTS)
    11. [QUERY] IndexType: BLOOM - bloom filter
    12. [QUERY] IndexType: BLOOM - 緩存穿透Cache Penetration
    13. [QUERY] IndexType: BLOOM
    14. [QUERY] 虛擬表(Virtual Table)
    15. [QUERY] 讀寫分離(Read/Write Splitting)
    16. [QUERY] 分割資料表(Partition/Sharding)
  5. [UPDATE/DELETE]
    01. [DELETE] 垃圾不分藍綠: Vacuum/ReIndex
  6. [完結] 下集待續

下一篇
[ACID] 事務(Transaction)
系列文
CRUD仔的一生(上集)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
雷N
iT邦研究生 1 級 ‧ 2023-09-19 10:33:28

超讚的內容, 希望大大能完賽
話說你這資料庫的對象主要是PostgreSQL吧?

謝謝,大同小異的範例主要都會是postgres
如果設計上思路不同的會選mysql與postgres來做說明
這次範圍主要限制在RDB

0
艾薇 Ivy
iT邦新手 4 級 ‧ 2023-11-10 18:07:07

來拜讀ㄏ勝的大作,請接收我的膝蓋~

謝謝,以後還請多多指教

我要留言

立即登入留言