1. 程式人生 > >業務訂單分庫分表二-擴容

業務訂單分庫分表二-擴容

一.原先業務訂單情況 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的清掉