DBLE官方網站:https://opensource.actionsky.com
能夠詳細瞭解DBLE的背景和應用場景,本文不涉及到的細節均可在官方文檔得到更細節都信息;對於剛瞭解到同窗,能夠以本文爲快速入門基礎
DBLE官方項目:https://github.com/actiontech/dble
如對源碼有興趣或者須要定製的功能的能夠經過源碼編譯
DBLE下載地址:https://github.com/actiontech/dble/releases
建議下載最新的releases版本,下載tar壓縮包便可,若有源碼編譯需求的,能夠下載源碼包node
上一篇"DBLE Schema.xml 配置解析"詳細介紹了DBLE之中關於Scema.xml的配置,本篇文章將繼續爲你們講解一下DBLE中Rule.xml文件的配置。git
DBLE的配置文件都在conf目錄裏面,經常使用的幾個配置文件以下:github
文件 | 說明 |
---|---|
server.xml | DBLE server相關參數定義,包括dble性能,定時任務,端口,用戶配置等;本文主要涉及到訪問用戶的配置 |
schema.xml | DBLE具體分片定義,規定table和schema以及dataNode之間的關係,指定每一個表格使用哪一種類型的分片方法,定義每一個dataNode的鏈接信息等 |
rule.xml | DBLE實際用到的分片算法的配置 |
其中rule.xml是平常配置分片算法的時候最經常使用到的配置文件,咱們經過思惟導圖的方式給你們整理了DBLE的rule.xml的配置,須要注意的是思惟導圖不能代替看文檔,導圖只能起着歸納概括的做用,詳細的細節還請參考官方文檔。算法
從分片的數據在各個數據節點分佈來看,分片可分爲連續分片和離散分片,連續分片就是將必定範圍內的數據所有分佈在某一DataNode, 離散分佈則是經過hash取模等方法將數據打散較爲均勻地分佈在各個DataNode。數據庫
分片 | 連續分片 | 離散分片 |
---|---|---|
優勢 | 併發訪問能力有限,擴容遷移代價小 | 併發訪問能力加強 範圍條件查詢性能提高 |
缺點 | 存在數據熱點的可能性,併發訪問能力受限於單一或少許DataNode | 數據擴容比較困難,須要對總體數據作從新分佈。 |
舉例 | date,numberrange | hash, stringhash, patternrange |
注:hash,patternrange分片方式若是配置
分片區間
足夠寬的話也是能夠當作連續分片的。併發
如下我以PatternRange算法爲例,講解一下如何配置該拆分算法,好比當前有一張表tasK_log
已經有1000萬的數據,這張表又由於須要和其餘表進行關聯查詢,單表太大進行關聯時異常緩慢,所以咱們須要對這張表作拆分, 將這張表分別放在三個分片上,dn1,dn2,dn3。性能
<table name="tasK_log" dataNode="dn1,dn2,dn3" rule="three_node_range" />
<?xml version="1.0"?> <!DOCTYPE dble:rule SYSTEM "rule.dtd"> <dble:rule xmlns:dble="http://dble.cloud/"> <tableRule name="three_node_range"> <rule> <columns>id</columns> <algorithm>three_node_range</algorithm> </rule> </tableRule> <function name="three_node_range" class="PatternRange"> <property name="mapFile">partition.txt</property> <property name="patternValue">1024</property> <property name="defaultNode">0</property> </function> </dble:rule>
[root@localhost ~]# cat partition.txt 0-255=0 256-511=1 512-1024=2
查找路由時,將id字段與patternValue取模,即計算M = id % patternValue,網站
關於每一種拆分算法的詳細介紹請參加官方文檔介紹。spa
rule.xml定義實際用到的拆分算法以及該拆分算法對應到的邏輯庫使用使用算法,熟悉各類拆分算法的詳細配置及其適用場景,才方便咱們在衆多數據拆分場景選擇並配置合適的拆分規則,同時這也是適用分庫分表中間件的第一步,而且實地演示了一個小小的拆分例子,使用到了patternrange算法。
將表的詳細拆分規則寫在配置中,這是一種很"傻"的方式,可是這也是萬不得已的一種選擇,若是不經過配置文件的方式告訴中間件這些信息,那麼中間件就無從得知底層具體的數據分佈狀況,也就達不到咱們最終想要分庫分表的目的了。code