分庫分表的理想方案:
- 均勻分佈資料,避免熱點問題;
- 對達到上限的節點保證不再寫入資料;
- 可以自由擴容;
- 不遷移資料。
部分Shading方案缺點分析:
- 基於雜湊的路由能均勻地分佈資料,但卻需要資料遷移,同時也無法避免對達到上限的節點不再寫入新資料;
- 基於增量區間的路由天然不存在資料遷移和向某一節點無上限寫入資料的問題,但卻存在“熱點”困擾;
- 結合資料庫維護一個Sequence表,這樣Sequence表本身可能會成為一個效能瓶頸。
我們設計方案的初衷就是希望能結合兩種路由規則的優勢,摒棄各自的劣勢,創造出一種接近“理想”狀態的擴容方式,而這種方式簡單概括起來如下:
全域性:按增量區間分佈資料,使用增量擴容,無資料遷移;
區域性:使用雜湊方式分散資料讀寫,解決“熱點”問題,同時對Sharding拓撲結構進行建模,使用一致的路由演算法,擴容時只需追加節點資料,不再修改雜湊邏輯程式碼。
垂直切分:把關係密切的表分到一個partition,如果同一個partition裡的表資料量很大且增長迅猛,再進行水平切分。
水平切分:將一張表的資料按增量區間或雜湊方式分散到多個Shard上儲存。
參考:http://www.jianshu.com/p/10c6fa27f889