數(shù)據(jù)訪問代理在創(chuàng)建數(shù)據(jù)庫時,提供了分片數(shù)的概念。分庫分表中的分庫是一個邏輯上的概念,物理上可能是一個物理數(shù)據(jù)庫代表一個“分庫”,也可能是多個物理數(shù)據(jù)庫組成一個“分庫”,在數(shù)據(jù)訪問代理里面統(tǒng)一概念稱 “分片”。
選擇分片數(shù)原則
分片數(shù)決定了數(shù)據(jù)訪問代理數(shù)據(jù)庫數(shù)的邏輯最大值,創(chuàng)建后無法修改。一般情況下,建議分片數(shù)和分表數(shù)保持一致,根據(jù)業(yè)務 3 到 5 年內的數(shù)據(jù)量設置一個較大值(如設置為 128),這樣在做數(shù)據(jù)庫擴容與遷移的時候,無需修改路由規(guī)則,以表為單位做整體的數(shù)據(jù)遷移操作即可。
場景分析
如果某用戶分片數(shù)設置較?。僭O設置分片數(shù)大小為 8),業(yè)務發(fā)展前期只購買了 2 個物理數(shù)據(jù)庫實例,分片數(shù)為 8,則每個物理數(shù)據(jù)庫實例均勻地存放了 4 個分片,結構如下:
隨著業(yè)務規(guī)??焖侔l(fā)展,兩個物理數(shù)據(jù)庫實例已經不能夠滿足業(yè)務要求,該用戶決定擴展成 4 臺,那么每臺物理數(shù)據(jù)庫實例應該存放了 2 個分片,通過數(shù)據(jù)訪問代理進行數(shù)據(jù)平滑遷移后,結構如下:
后續(xù)業(yè)務規(guī)模繼續(xù)發(fā)展,最終也只能將物理數(shù)據(jù)庫實例擴展為 8 臺,通過數(shù)據(jù)訪問代理進行數(shù)據(jù)平滑遷移后,結構如下:
如果擴展需要超過 8 臺的話,數(shù)據(jù)遷移過程所有數(shù)據(jù)需要重新分配,涉及到的數(shù)據(jù)遷移工作會比較復雜,而且對應的分庫分表規(guī)則腳本、業(yè)務代碼中的自定義路由 HINT 也需要一起調整,成本較高且無法完全平滑遷移。
所以建議在業(yè)務設計之初,為了滿足業(yè)務 3 到 5 年內的數(shù)據(jù)庫容量,合理地選擇一個較大的分片數(shù)的值。