第十七屆 佳作

software-development
資料庫大哉問
vicxu

系列文章

DAY 11

Day11 - MySQL 如何避免 DeadLock?(Deadlock Analysis)

使用 Lock 最大的風險就是 DeadLock,最常見案例是「互相持有並等待」: ## transaction A: BEGIN SELECT * FROM...

DAY 12

Day12 - MySQL 寫入資料時如何確保 Durability?(WAL & Redo Log)

Transaction ACID 中 Durability 要求資料不可遺失,因此一旦 Transaction Commit 後,資料就要寫進硬碟,不能只放在記...

DAY 13

Day13 - MySQL 如何將快取資料寫入硬碟?(Flush Process)

MySQL 寫入流程是: 將資料從硬碟載入 Buffer Pool (記憶體) 在記憶體中更新資料,並寫入異動內容 Log Buffer (Redo Log...

DAY 14

Day14 - MySQL 如何管理 Schema?(Schema Migration Strategy)

Transaction ACID 中的 Consistency 要求資料更新前後要符合資料規則,確保資料正確,而資料規則主要是透過 Schema 來制定的,例如...

DAY 15

Day15 - MySQL 如何優化大表查詢?(Partition)

當資料表到千萬筆資料即便有 Index 查詢速度仍可能不理想,就像 O(LogN) 的演算法,當 N 很大時程式仍會執行很慢,若要程式執行變快,其中一個方式是把...

DAY 16

Day16 - MySQL 如何應付大量查詢流量?(Binlog, Slave DB)

隨著系統業務量增加,即便將查詢優化到極致,系統仍會負荷不了瞬間大量查詢,此時只剩垂直與水平擴充兩個選項,垂直擴充相對簡單,提升硬體 CPU 和記憶體,但缺點是升...

DAY 17

Day18 - 分散式資料庫特輯 - 什麼是 Database Sharding?(consistent hashing & re-sharding)

在 Cluster 架構中,除了 Master Slave 架構外,還有多 Master 架構,該架構主要解決: 資料量大到單台資料庫無法負荷,例如記憶體或...

DAY 18

Day17 - MySQL 如何架設高可用的 Master-Slave 架構?(ProxySQL & Orchestrator)

架設高可用的 MySQL Cluster 不只要讓多台 Slave 去接收 Master 的 Binlog 同步資料,還要做到當 Master Crush 時,...

DAY 19

Day19 - 分散式資料庫特輯 - 什麼是 DHT 技術?(Chord & Kademlia)

分散式資料庫(e.g Cassandra、MongoDB)中的資料庫數量是可控的,Sharding Metadata 可儲存在外部資料庫 (e.g ZooKee...

DAY 20

Day20 - 分散式資料庫特輯 - 如何實現分散式 Transaction?(2-phase commit, xa, TiDB percolator)

分散式資料庫除了 Data Sharding 關鍵技術外,跨 Server Transaction 實作 ACID 功能也很重要,然而當資料分散在不同資料庫後,...