Please enable JavaScript.
Coggle requires JavaScript to display documents.
DB Sharding - Coggle Diagram
DB Sharding
分片策略
sharding rule
shardingColumn: userid
algorithm-expression: user
data
${userid.hashCode() % 2}
數據遷移可以考慮用SQL搬遷
需要驗證(from gpt)
INSERT INTO user_data_0 (userid, site, data)
SELECT userid, site, data
FROM user_data
WHERE MOD(CONV(LEFT(MD5(userid), 8), 16, 10), 2) = 0;
目前2200萬user 分16個sharding table 一個table125萬
目前每天增長2-3萬 account 一年約為 1100萬
每個TABLE每年約增長70萬
約十年後才需擴展
Apache ShardingSphere
程式功能
新增ConnManager
如何跟一般DBPool Enum結合使用
針對DAO如何進行雙寫動作
(次要為非同步為主,避免影響主要行為)
BO會進行ROLL BACK或 COMMIT動作
不管SHARDING還是非SHARDING 都須雙寫
避免切回去有問題 切回來後就沒資料
flag
切原本做法 (雙寫)
切為sharding (雙寫)
穩定後 只有shading (單寫)
support db query頁面查詢也須更新
betfair settle manager 需重點觀察有無影響
batch update account balance 是否要採取XA事務
一個BATCH有問題是否要全部回滾
或著採用 先分類好sharding table GROUP然後 BY SARDING TABLE去UPDATE
( ShardingSphere 分布式事务,为用户屏蔽了分布式事务处理的复杂性,提供了灵活多样的分布式事务解决方案,用户可以根据自己的业务场景在 LOCAL,XA,BASE 三种模式中,选择适合自己的分布式事务解决方案。)
分布式事务
如何roll back
跟原本的使用方式相同
需記錄非同步寫入的資料 避免server損壞導致數據不一致
DoubleWriteConnection
wrapper for Connection
DBPool Main 跟 sharding pool使用
BO跟DAO (insert / update )改用此connection
DBUtils , DBQueryRunner需要支援該Connection
經由加工 發覺commit 跟 close 來觸發雙寫動作
dr conn 會先記錄行為( reflection 反射 method )
async 執行double write
7.1 有個狀態紀錄目前是否COMMIT and CLOSE
7.2 等到原本的commit之後 觸發另一個async去執行commit c或者異步執行完去檢查原本的那個conn狀態 在進行commit
7.3 DobleWriteManager儲存該更新結果 以便讓異步執行完檢查結果
SQL改寫
複雜查詢 如union怎辦
資料遷移
分片擴展( resharding )
擴展新的分片時 全部資料需要重新sharding分配
依初始資料的邏輯進行
根據各sharding table 備份先寫進一份,如果寫進一樣DB會有性能影響
雙寫功能會變成寫擴充前的table 跟擴充後的table
初始資料轉換
避免依次寫入全部account耗費大量時間,先拿某天的ACCOUNT備份拿來先用sharding規則寫人
在轉換那天停機 使用update date( 比對上次寫入的最後update date )的規則抓出更新的ACCOUNT 寫入減少時間的消耗
開機後執行雙寫動作,檢查sharding的table資料完整性,正確性
server開始循序轉換回sharding table
穩定後切換至sharding table
程式需求
以OP03( upgrade server )新增一功能- sharding data migration來轉移資料
多執行序及批次寫入
TABLE紀錄更新情況
驗證程式 : 筆數,隨機抽取一百筆account 看balance是否正確,欄位格式如 update date
( OPT )彈性,不只限於ACCOUNT,設計為MODULE PLUGIN,拆分進度紀錄,拆分更新邏輯,驗證邏輯,更新TABLE邏輯等模塊
可行的拆分方式
6-1 (OPT) 有問題中斷時則用資料的updatedate作為最後資料獲取的依據(但就必須排序資料)
6-2 建立TEMP TABLE,先以SITE為GROUP 在排序UPDATE DATE(需觀察執行速度情況)
測試
dev
準備五台DB
dev account backup, sim account backup
另外四台 sharding node, 每台四個sharding table
TiDB
MyCAT
Vitess
Apache ShardingSphere 默认提供了对 Prometheus 的支持。