文章来源:爱可生云数据库
做者:余朝飞node
DBLE项目介绍git
DBLE官方网站:https://opensource.actionsky.com
能够详细了解DBLE的背景和应用场景,本文不涉及到的细节均可在官方文档得到更细节都信息;对于刚了解到同窗,能够以本文为快速入门基础
DBLE官方项目:https://github.com/actiontech...
如对源码有兴趣或者须要定制的功能的能够经过源码编译
DBLE下载地址:https://github.com/actiontech...
建议下载最新的releases版本,下载tar压缩包便可,若有源码编译需求的,能够下载源码包github
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举例spa
从分片的数据在各个数据节点分布来看,分片可分为连续分片和离散分片,连续分片就是将必定范围内的数据所有分布在某一DataNode, 离散分布则是经过hash取模等方法将数据打散较为均匀地分布在各个DataNode。code
分片 | 连续分片 | 离散分片 |
---|---|---|
优势 | 并发访问能力有限,扩容迁移代价小 | 并发访问能力加强 范围条件查询性能提高 |
缺点 | 存在数据热点的可能性,并发访问能力受限于单一或少许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,
关于每一种拆分算法的详细介绍请参加官方文档介绍。
总结
rule.xml定义实际用到的拆分算法以及该拆分算法对应到的逻辑库使用使用算法,熟悉各类拆分算法的详细配置及其适用场景,才方便咱们在众多数据拆分场景选择并配置合适的拆分规则,同时这也是适用分库分表中间件的第一步,而且实地演示了一个小小的拆分例子,使用到了patternrange算法。
将表的详细拆分规则写在配置中,这是一种很"傻"的方式,可是这也是万不得已的一种选择,若是不经过配置文件的方式告诉中间件这些信息,那么中间件就无从得知底层具体的数据分布状况,也就达不到咱们最终想要分库分表的目的了。