原創做者: 鍾悅算法
關於做者架構
鍾 悅 - 資深DBLE用戶運維
某宇宙行資深架構師,在大型重點項目中使用 DBLE。code
常年與 MySQL 糾纏不清,常常運用技術處理大企業病的技術or非技術問題的一個挨踢從業者。xml
根據用戶定義的枚舉值與分片節點映射文件,直接定位目標分片。中間件
用戶在rule.xml中配置枚舉值文件路徑和分片索引是字符串仍是數字,DBLE在啓動時會將枚舉值文件加載到內存中,造成一個映射表blog
在DBLE的運行過程當中,用戶訪問使用這個算法的表時,WHERE子句中的分片索引值會被提取出來,直接查映射表獲得分片編號索引
與MyCat的相似分片算法對比內存
中間件 | DBLE | MyCat |
---|---|---|
分片算法種類 | enum 分區算法 | 分片枚舉 |
兩種中間件的枚舉分片算法使用上無差異。路由
開發注意點
【分片索引】1. 整型數字(能夠爲負數)或字符串((不含=和換行符)
【分片索引】2. 枚舉值之間不能重複
Male=0 Male=1
或者
123=1 123=2
會致使分片策略加載出錯
【分片索引】3. 不一樣枚舉值能夠映射到同一個分片上
Mr=0 Mrs=1 Miss=1 Ms=1 123=0
運維注意點
【擴容】1. 增長枚舉值無需數據再平衡
【擴容】2. 增長一個枚舉值的分片數量數時,須要對局部數據進行遷移
【縮容】1. 減小枚舉值須要數據再平衡
【縮容】2. 減小一個枚舉值的分片數量數時,須要對局部數據進行遷移
配置注意點
【配置項】1. 在 rule.xml 中,可配置項爲 <property name="defaultNode"> 、<property name="mapFile"> 和 <property name="type">
【配置項】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 所配置的文件
記錄格式爲:<枚舉值>=<分片編號>
枚舉值能夠是整型數字,或任意字符(除了=和換行符),分片編號必須是非負整型數字,記錄之間以換行分隔,一行僅能有一條記錄,枚舉值不可以是「DEFAULT_NODE」這個字符串,容許以「//」和「#」在行首來註釋該行
【配置項】5. 在 rule.xml 中配置 <property name="type"> 標籤;type 必須爲整型;取值爲 0 時,mapFile 的<枚舉值>必須爲整型;取值爲非 0 時,mapFile 的<枚舉值>能夠是任意字符(除了=和換行符)