社區投稿 | DBLE rule.xml 配置解析

文章來源:愛可生雲數據庫
作者:餘朝飛

DBLE項目介紹

DBLE官方網站:https://opensource.actionsky.com
可以詳細瞭解DBLE的背景和應用場景,本文不涉及到的細節都可在官方文檔獲得更細節都信息;對於剛瞭解到同學,可以以本文爲快速入門基礎
DBLE官方項目:https://github.com/actiontech...
如對源碼有興趣或者需要定製的功能的可以通過源碼編譯
DBLE下載地址:https://github.com/actiontech...
建議下載最新的releases版本,下載tar壓縮包即可,如有源碼編譯需求的,可以下載源碼包

DBLE的主要配置文件

上一篇"DBLE Schema.xml 配置解析"詳細介紹了DBLE之中關於Scema.xml的配置,本篇文章將繼續爲大家講解一下DBLE中Rule.xml文件的配置。

DBLE的配置文件都在conf目錄裏面,常用的幾個配置文件如下:

文件 說明
server.xml DBLE server相關參數定義,包括dble性能,定時任務,端口,用戶配置等;本文主要涉及到訪問用戶的配置
schema.xml DBLE具體分片定義,規定table和schema以及dataNode之間的關係,指定每個表格使用哪種類型的分片方法,定義每個dataNode的連接信息等
rule.xml DBLE實際用到的分片算法的配置

rule.xml配置解析

其中rule.xml是日常配置分片算法的時候最常用到的配置文件,我們通過思維導圖的方式給大家整理了DBLE的rule.xml的配置,需要注意的是思維導圖不能代替看文檔,導圖只能起着概括歸納的作用,詳細的細節還請參考官方文檔。

rule.xml舉例

從分片的數據在各個數據節點分佈來看,分片可分爲連續分片和離散分片,連續分片就是將一定範圍內的數據全部分佈在某一DataNode, 離散分佈則是通過hash取模等方法將數據打散較爲均勻地分佈在各個DataNode。

分片 連續分片 離散分片
優點 併發訪問能力有限,擴容遷移代價小 併發訪問能力增強 範圍條件查詢性能提升
缺點 存在數據熱點的可能性,併發訪問能力受限於單一或少量DataNode . 數據擴容比較困難,需要對整體數據做重新分佈。
舉例 date,numberrange hash, stringhash, patternrange
注:hash,patternrange分片方式如果配置分片區間足夠寬的話也是可以當做連續分片的。

以下我以PatternRange算法爲例,講解一下如何配置該拆分算法,比如當前有一張表tasK_log已經有1000萬的數據,這張表又因爲需要和其他表進行關聯查詢,單表太大進行關聯時異常緩慢,因此我們需要對這張表做拆分, 將這張表分別放在三個分片上,dn1,dn2,dn3。

  • schema.xml中的配置如下
  <table name="tasK_log"  dataNode="dn1,dn2,dn3" rule="three_node_range" />
  • rule.xml中配置如下:
<?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>
  • mapfile partition.txt定義如下:
[root@localhost ~]# cat partition.txt 
0-255=0
256-511=1
512-1024=2

查找路由時,將id字段與patternValue取模,即計算M = id % patternValue,

  • 如果M在0-255之間,在數據落在dn1分片。
  • 如果M在256-511之間,在數據落在dn2分片。
  • 如果M在512-1024之間,則數據落在dn3分片。
  • 如果都匹配不上,則落在默認節點defaultNode dn1分片(理論上在這個例子中是不可能匹配不上的)

關於每一種拆分算法的詳細介紹請參加官方文檔介紹。

總結

rule.xml定義實際用到的拆分算法以及該拆分算法對應到的邏輯庫使用使用算法,熟悉各種拆分算法的詳細配置及其適用場景,才方便我們在衆多數據拆分場景選擇並配置合適的拆分規則,同時這也是適用分庫分表中間件的第一步,並且實地演示了一個小小的拆分例子,使用到了patternrange算法。
將表的詳細拆分規則寫在配置中,這是一種很"傻"的方式,但是這也是萬不得已的一種選擇,如果不通過配置文件的方式告訴中間件這些信息,那麼中間件就無從得知底層具體的數據分佈情況,也就達不到我們最終想要分庫分表的目的了。

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章