業務訂單分庫分表二-擴容
阿新 • • 發佈:2019-01-30
一.原先業務訂單情況
2個物理表, order_0000,order_0032
每個分組32個邏輯分表
原先元素分佈:
邏輯分表號:0-31 在order_0000,32-63在order_0032
物理分表名=邏輯分表號/32%32
二.擴容
擴充套件成4個物理分表
每個邏輯分組有:16個邏輯分表
即 order_0000,order_0016,order_0032,order_0048
物理分表名=邏輯分表號/16*16
資料遷移:
order_0000中邏輯分表號:16-31的資料往order_0016遷
order_0032中,邏輯分表號:48-63的資料往order_0048遷
即只需遷移原先每個物理表一半的資料到新的物理表,二分裂變。
擴容的本質是物理表數增加,邏輯分組表數減少。
三.擴容具體過程
eg:
原先1個庫,二個表,擴容成4個表。
原先物理表:
0000,0032
0000管理虛擬id範圍為:0-31
0032管理虛擬id範圍為:32-63
擴容後物理表:
0000,0016,0032,0048
具體流程:
0.準備好0016及0048兩張新表。
1.對外停止交易,停止相應會引起訂單狀態變化的job
2.將0000表資料拷到0016,將0032拷到0048。
3.校驗0016及0048中表資料與0000及0032的資料一致
從條數,明細等進行核對,相應訂單明細記錄狀態都一致。
3.啟用新的規則
根據使用者id路由到表規則更改為:userId %64 /16 * 16 (原先:userId %32 /32 * 32)
根據訂單號id路由到表規則更改為:取訂單最後2位分表id / 16 * 16 (原先是/32 * 32)
這步做完後相應的查詢流量已經變為新的查詢。
4.開啟交易,開啟之前停掉的job
5.定時check資料,日誌看是否有異常
6.找個時間點清除0000及0032中不用的資料
0000的虛擬id區間為:15-31的清掉
0032的虛擬id區間為:48-63的清掉