最基礎架構,如用戶表 user 置於庫 db,所有數據集中查詢。適合早期業務量小、結構簡單場景。
單表數據量大導致查詢變慢、DDL 鎖表影響讀寫。按規則(如 user_id % 4)拆分為 user_0000、user_0001 等結構相同的表,數據總和保持完整。
單機存儲與查詢能力觸達瓶頸,進一步將表分散至多個數據庫實例,實現存儲與計算的水平擴展。
根據分片鍵(如 user_id)計算目標庫表:
user_id = 123 → 123 % 4 = 3 → 寫入/讀取 user_0003 表
路由邏輯需在應用層或中間件層統一實現,確保寫入與查詢一致性。
場景:用戶購買商品,按 user_id 分表易查用戶訂單,難查商品銷量;按 item_id 則相反。
對策:
關聯表可能分布不同庫,應用層組裝或冗余字段替代。
單事務跨庫修改複雜且效率低,業務設計應盡量避免。
同一賣家的商品、交易放同一庫,故障域隔離,避免跨庫強依賴。
一主多從:寫入 Master,讀取分流至 Slave。Slave 可級聯掛載。優勢:大幅提升 QPS。挑戰:
100 庫 × 100 表 × 500 萬 = 5000 億記錄,足支撐大多數業務增長。