'MyCat如何遷移到DBLE之分片算法對比解析:numberrange分片'

算法 MySQL Java 愛可生 2019-08-04
"

關於作者

鍾悅 - 資深DBLE用戶

某宇宙行資深架構師,在大型重點項目中使用 DBLE。

常年與 MySQL 糾纏不清,經常運用技術處理大企業病的技術or非技術問題的一個挨踢從業者。

根據用戶定義的範圍與分片節點映射文件,直接定位目標分片。

"

關於作者

鍾悅 - 資深DBLE用戶

某宇宙行資深架構師,在大型重點項目中使用 DBLE。

常年與 MySQL 糾纏不清,經常運用技術處理大企業病的技術or非技術問題的一個挨踢從業者。

根據用戶定義的範圍與分片節點映射文件,直接定位目標分片。

MyCat如何遷移到DBLE之分片算法對比解析:numberrange分片


1. 用戶在 rule.xml 中配置範圍定義文件路徑,文件中定義的各個範圍被加載到內存中,形成一個映射表

2. 在 DBLE 的運行過程中,用戶訪問使用這個算法的表時,WHERE 子句中的分片索引值會被提取出來,直接查映射表得到分片編號

與MyCat的類似分片算法對比

"

關於作者

鍾悅 - 資深DBLE用戶

某宇宙行資深架構師,在大型重點項目中使用 DBLE。

常年與 MySQL 糾纏不清,經常運用技術處理大企業病的技術or非技術問題的一個挨踢從業者。

根據用戶定義的範圍與分片節點映射文件,直接定位目標分片。

MyCat如何遷移到DBLE之分片算法對比解析:numberrange分片


1. 用戶在 rule.xml 中配置範圍定義文件路徑,文件中定義的各個範圍被加載到內存中,形成一個映射表

2. 在 DBLE 的運行過程中,用戶訪問使用這個算法的表時,WHERE 子句中的分片索引值會被提取出來,直接查映射表得到分片編號

與MyCat的類似分片算法對比

MyCat如何遷移到DBLE之分片算法對比解析:numberrange分片

  • K=1000 , M=10000

開發注意點

【分片索引】1. 整型數字(可以為負數),取值範圍是長整型

【分片索引】2. 範圍包含其起點和終點,例如,範圍 1-100 包含 1 和 100(即 [1, 100])

【分片索引】3. 如果範圍與範圍之間存在重疊(例如 1-100 和 100-200 重疊於 100),不會引起異常,會命中在範圍配置文件mapFile中最先出現的那一個並按其執行

【分片索引】4. 不同範圍可以映射到同一個分片上

0 - 99 = 0
100 - 199 = 0

【數據分佈】1. 無法保證均勻

【數據分佈】2. 總分數量等於範圍配置文件 mapFile 中各範圍持有的分片數量之和

運維注意點

【擴容】1. 原有範圍(含默認節點)的數據太熱,需要拆分成多個新的更小的範圍來擴展到不同MySQL節點時,需要對局部數據進行遷移

【縮容】1. 原有的幾個範圍的數據太冷,需要合併到同一個 MySQL 節點來節省資源時,需要對局部數據進行遷移

配置注意點

【配置項】1. 在 rule.xml 中,可配置項為<property name="defaultNode">和<property name="mapFile">

【配置項】2.在 rule.xml 中配置<property name="defaultNode">標籤,非必須配置項,不配置該項的話,用戶的分片索引值沒落在 mapFile 定義的範圍時,DBLE 會報錯;若需要配置,必須為非負整數,用戶的分片索引值沒落在 mapFile 定義的範圍時,DBLE 會路由至這個值的 MySQL 分片

【配置項】3. 在 rule.xml 中配置<property name="mapFile">標籤,範圍映射文件的路徑:若在映射文件在 DBLE_HOME/conf 或其中,則可以使用相對路徑的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 時,配置值就可以簡寫為 map/table_map.txt;映射文件在 DBLE_HOME/conf 目錄以外時,需要使用絕對路徑,但這種做法需要考慮用戶權限等問題,因此不建議把映射文件放在 DBLE_HOME/conf 外。

【配置項】4. 編輯 mapFile 所配置的文件

記錄格式為:<範圍最小值> - <範圍最大值> = <分片編號>

範圍最小值和範圍最大值必須是整型數字,取值範圍為 Java 的長整型範圍內,分片編號必須是非負整型數字,記錄之間以換行分隔,一行僅能有一條記錄,允許以 “//” 和 “#” 在行首來註釋該行

【配置項】5. 讀取 mapFile 時,DBLE 不會對其中的範圍記錄查重或排序,也不會檢查範圍最小值和範圍最大值相互之間誰更大

【配置項】6. mapFile 中的記錄的先後順序非常重要,目前的最佳實踐是人手確保範圍與範圍之間沒有重疊,而且按照數據查詢頻率,從高頻到低頻來順序填寫 mapFile

"

相關推薦

推薦中...