Mysql Shardingsql
前言網站
1)Sharding是按照必定規則從新分佈數據的方式spa
2)解決單機寫入壓力過大和容量問題設計
3) 解決單機查詢慢的問題code
4)本文主要根據用戶登陸場景分析blog
Sharding規則get
1)垂直拆分,通常是表中的字段比較多,按照業務分類拆分到不一樣的表中。it
2)水平拆分,通常是表中的數據量巨大,按照特定規則拆分到不一樣的表中。io
1. mod方式 table
例:網站有N種(手機號、郵箱、第三方...)登陸方式
function get_table_name($unique_name) { $tb_num = 8; // 表數量 return 'login_' . intval(sprintf('%u', crc32($unique_name)) % $tb_num); } var_dump(get_table_name('username'));//login_7
優勢:
解決熱點問題
缺點:
數據分佈不平均。容易出現單表過大問題
擴容時,須要從新遷移數據。
2. range方式
例:網站有N種(手機號、郵箱、第三方...)登陸方式,每一個表存1000W數據
function get_table_name($unique_name) { $tb_split = 10000000; // 單表數據量 return 'login_' . intval(sprintf('%u', crc32($unique_name)) / $tb_split); } var_dump(get_table_name('username'));//login_416
優勢:
不須要數據遷移
缺點:
數據分佈不平均。出現不少表
3. 暫時先使用range方式,先把$tb_split設置大一點。須要擴容時在從新遷移數據把$tb_split改小。
Sharding後
1)設計方案時儘可能避免數據遷移、熱點問題。同時要保證易於水平擴展
1)全局自增id方案
2)跨庫、跨表join