1. 程式人生 > >讀書筆記-Mycat權威指南-10-分片規則

讀書筆記-Mycat權威指南-10-分片規則

line -m 字典 取模運算 連接 兩個 範圍查詢 技術分享 取數

分片規則概述

在數據切分處理中,特別是水平切分中,中間件最終要的兩個處理過程就是數據的切分、數據的聚合。

選擇 合適的切分規則,至關重要,因為它決定了後續數據聚合的難易程度,甚至可以避免跨庫的數據聚合處理。

前面講了數據切分中重要的幾條原則,其中有幾條是數據冗余,表分組(Table Group),

這都是業務上規 避跨庫 join 的很好的方式,但不是所有的業務場景都適合這樣的規則,因此本章將講述如何選擇合適的切分規則。

Mycat 全局表

如果你的業務中有些數據類似於數據字典,比如配置文件的配置,常用業務的配置或者數據量不大很少變動的表。

這些表往往不是特別大,而且大部分的業務場景都會用到,那麽這種表適合於Mycat 全局表,無須對數據 進行切分,只要在所有的分片上保存一份數據即可。

ER 分片表

有一類業務,例如訂單(order)跟訂單明細(order_detail),明細表會依賴於訂單,也就是說會存在表的主 從關系。

這類似業務的切分可以抽象出合適的切分規則,比如根據用戶 ID 切分,其他相關的表都依賴於用戶 ID, 再或者根據訂單 ID 切分,總之部分業務總會可以抽象出父子關系的表。

這類表適用於 ER 分片表,子表的記錄與 所關聯的父表記錄存放在同一個數據分片上,避免數據 Join 跨庫操作。

多對多關聯

有一類業務場景是 “主表 A+關系表+主表 B”,舉例來說就是商戶會員+訂單+商戶,對應這類業務,如何 切分?

從會員的角度,如果需要查詢會員購買的訂單,那按照會員進行切分即可。

但是如果要查詢商戶當天售出的訂單,那又需要按照商戶做切分,可是如果既要按照會員又要按照商戶切分,幾乎是無法實現,這類業務如何選 擇切分規則非常難。

目前還暫時無法很好支持這種模式下的 3 個表之間的關聯。目前總的原則是需要從業務角度 來看,關系表更偏向哪個表,即“A 的關系”還是“B 的關系”,來決定關系表跟從那個方向存儲。

未來 Mycat 版本中將考慮將中間表進行雙向復制,以實現從 A-關系表 以及 B-關系表的雙向關聯查詢如下圖所示:

技術分享

Mycat 常用的分片規則

分片枚舉

通過在配置文件中配置可能的枚舉 id,自己配置分片,本規則適用於特定的場景,比如有些業務需要按照省 份或區縣來做保存,而全國省份區縣固定的,這類業務使用本條規則。

固定分片 hash 算法

本條規則類似於十進制的求模運算,區別在於是二進制的操作,是取 id 的二進制低 10 位,即 id 二進制 &1111111111。

此算法的優點在於如果按照 10 進制取模運算,在連續插入 1-10 時候 1-10 會被分到 1-10 個分片,增 大了插入的事務控制難度,而此算法根據二進制則可能會分到連續的分片,減少插入事務事務控制難度。

範圍約定

此分片適用於,提前規劃好分片字段某個範圍屬於哪個分片, start <= range <= end. range start-end ,data node index K=1000,M=10000。

取模

此規則為對分片字段求摸運算。

按日期(天)分片

此規則為按天分片。

取模範圍約束

此種規則是取模運算與範圍約束的結合,主要為了後續數據遷移做準備,即可以自主決定取模後數據的節點分布。

截取數字做 hash 求模範圍約束

此種規則類似於取模範圍約束,此規則支持數據符號字母取模。

應用指定

此規則是在運行階段有應用自主決定路由到那個分片。

截取數字 hash 解析

此規則是截取字符串中的 int 數值 hash 分片。

一致性 hash

一致性 hash 預算有效解決了分布式數據的擴容問題。

按單月小時拆分

此規則是單月內按照小時拆分,最小粒度是小時,可以一天最多 24 個分片,最少 1 個分片,一個月完後下月 從頭開始循環。 每個月月尾,需要手工清理數據。

範圍求模分片

先進行範圍分片計算出分片組,組內再求模 優點可以避免擴容時的數據遷移,又可以一定程度上避免範圍分片的熱點問題。

綜合了範圍分片和求模分片的優點,分片組內使用求模可以保證組內數據比較均勻,分片組之間是範圍分片 可以兼顧範圍查詢。

最好事先規劃好分片的數量,數據擴容時按分片組擴容,則原有分片組的數據不需要遷移。由於分片組內數 據比較均勻,所以分片組內可以避免熱點數據問題。

日期範圍 hash 分片

思想與範圍求模一致,當由於日期在取模會有數據集中問題,所以改成 hash 方法。

先根據日期分組,再根據時間 hash 使得短期內數據分布的更均勻 優點可以避免擴容時的數據遷移,又可以一定程度上避免範圍分片的熱點問題。

冷熱數據分片

根據日期查詢日誌數據 冷熱數據分布 ,最近 n 個月的到實時交易庫查詢,超過 n 個月的按照 m 天分片。

自然月分片

按月份列分區 ,每個自然月一個分片,格式 between 操作解析的範例

權限控制

目前 Mycat 對於中間件的連接控制並沒有做太復雜的控制,目前只做了中間件邏輯庫級別的讀寫權限控制。

讀書筆記-Mycat權威指南-10-分片規則