数据库中间件分片算法之enum
前言
最近挺焦虑的,不知道未来该做什么,方向又是什么。只能用别慌,月亮也正在大海的某处迷茫。来安慰下自己。不过学习的初心咱们还是不要忘记。今天我们学习的是enum分片算法。
1.hash分区算法
2.stringhash分区算法
3.enum分区算法
4.numberrange分区算法
5.patternrange分区算法
6.date分区算法
7.jumpstringhash算法
enum分区算法的配置
<tableRule name="rule_enum">
<rule>
<columns>code</columns>
<algorithm>func_enum</algorithm>
</rule>
</tableRule>
<function name="enum" class="enum">
<property name="mapFile">partition.txt</property>
<property name="defaultNode">0</property>
<property name="type">0</property>
</function>
enum和之前的hash算法一样。需要在rule.xml中配置tableRule和function。
- tableRule标签,name对应的是规则的名字,而rule标签中的columns则对应的分片字段,这个字段必须和表中的字段一致。algorithm则代表了执行分片函数的名字。
- function标签,name代表分片算法的名字,算法的名字要和上面的tableRule中的标签相对应。class:指定分片算法实现类。property指定了对应分片算法的参数。不同的算法参数不同。
- mapFile:指定配置文件名。其格式将在下面做详细说明。
- defaultNode:指定默认节点号。默认值为-1,不指定默认节点。
- type:指定配置文件中key的类型。0:整型; 其它:字符串。
mapfile文件格式配置如下:
a.type=0,
int1=node0
int2=node1
a.type=其他
string1=node0
string2=node1
1.启动加载配置
当启动的时候,会先根据type的值判断是字符串还是数字。然后把mapfile中配置的值加载到内存中,形成一个映射表。
例如上面的配置中type=0,就可以判断是数字,然后查看mapFile对应的文件partition.txt,可以查到:
10000=0
10010=1
也就是枚举值10000,就存放在分片1上,而枚举值10010,就存放在分片2上。
2.运行过程
当在运行的过程中,如果有用户通过查询code=10000或者是code=10001的时候,就会访问这个枚举算法。根据上面的映射表直接查询得到分片的编号。
3.我们建表来测试一下。
通过创建test_enum表,我们插入三条数据,分别是code=10000,10010,10020,可以看到10000被存放在分片1上,10010被存放在分片2上。这个和我们在partition.txt中配置的文件一样。当我们插入10020的时候,因为枚举值不存在,它会选择默认的分片节点dn1。这里不会因为错误而报错。
枚举在使用的时候,需要把已知的全部罗列出来。但是也有劣势,就是可能罗列不全,在这个时候把不在枚举定义范围的数字存放到默认节点是一个没有办法的办法,如果突然因为某个新版本上线,出现一些新的枚举类型而没有及时更新,会导致默认节点数据快速膨胀。此时就需要进行扩容,然后实现局部数据迁移。
注意事项
- mapfile文件不包含“=”的行将被跳过.
- 重复的枚举值的分区数据节点以最后一个配置为准。
- 分片字段为该枚举类型。
- 分片字段为NULL时,数据落在defaultNode节点上,若此时defaultNode没有配置,则会报错;当真实存在于mysql的字段值为not null的时候,报错 "Sharding column can't be null when the table in MySQL column is not null"
后记
今天介绍的枚举算法较为简单。后续将继续带来剩下几种算法,谢谢支持!
数据库中间件分片算法之enum的更多相关文章
- 数据库中间件分片算法之stringhash
前言 又是一个夜黑风高的晚上,带上无线耳机听一曲.突然很感慨一句话:生活就像心电图,一帆风顺就证明你挂了. 就如同我们干运维的,觉得很简单的事情,有时候能干出无限可能.还是言归正传吧,这一次我们来说说 ...
- 开源数据库中间件-MyCat
开源数据库中间件-MyCat产生的背景 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系型数据库已经无法满足快速查询与插入数据的需求.这 ...
- 数据库中间件MyCat学习总结(1)——MyCat入门简介
为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代.如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷. MyCat的目标就是:低成本 ...
- 对话DDM:分布式数据库中间件全解析
进入云计算时代,传统的数据库在性能和容量等方面已无法满足企业的要求,随着数据量的不断骤增,易于扩展.拆分的数据库解决方案对于企业的云化转型更是显得尤为重要.为使企业应用上云更简单,分布式数据库中间件D ...
- 数据库中间件DBLE学习(二) 学习配置schema.xml
前言 一边有一个经常引诱我让我"娱乐至死"的视频,还有一个不停"鞭策"我让我快点学习的大BOSS.正是有这两种极端的爱才让我常常在自信中明白自己努力的方向.嗯, ...
- 数据库中间件DBLE学习(一) 基础介绍和快速搭建
dble基本架构简介 dble是上海爱可生信息技术股份有限公司基于mysql的高可用扩展性的分布式中间件.江湖人送外号MyCat Plus.开源地址 我们首先来看架构图,外部应用通过NIO/AIO进行 ...
- Apache ShardingSphere:由开源驱动的分布式数据库中间件生态
2021 年 7 月 21 日 2021 亚马逊云科技中国峰会现场,SphereEx 联合创始人.Apache ShardingSphere PMC 潘娟受邀参与此次峰会,以<Apache Sh ...
- 数据库中间件ShardingSphere-Proxy(一)
1.现实中的问题 我们知道数据库的数据,基本80%的业务是查询,20%的业务涵盖了增删改,经过长期的业务变更和积累数据库的数据到达了一定的数量之后,直接影响的是用户与系统的交互,查询时的速度,插入数据 ...
- MyCat:取代Cobar数据库中间件
什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库 ...
随机推荐
- Jquery常用方法汇总(转)
https://blog.csdn.net/lucky___star/article/details/87883888
- laravel5.4 发送SMTP邮件
https://blog.csdn.net/qq_35843527/article/details/77880631 Lumen / Laravel 5.4 使用网易邮箱 SMTP 发送邮件 获取网易 ...
- 十分钟学会 Fiddler
一.Fiddler介绍 Fiddler是一个http抓包改包工具,fiddle英文中有"欺骗.伪造"之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和http ...
- H3C 网络号和主机号
- asp.net mvc获取路由参数
学习了mvc有一段时间了,本以为直接可以通过request对象直接获取路由参数呢,后来实验了一下发现想错了,mvc有专门获取路由参数的方式,在不同的地方,获取路由参数的方式也不一样,这里分别说一下,在 ...
- SVG和canvas画图,js求数组最大最小值
windows命令行的内容怎么复制,右键选择标记,选中内容后再点击鼠标右键就复制了. 安装Node.js后再用npm install命令会出现如下warn:saveError ENOENT: no s ...
- hdu 2639 Bone Collector II(01背包 第K大价值)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- servicemix-3.2.1 部署异常
<jbi-task xmlns="http://java.sun.com/xml/ns/jbi/management-message" version="1.0&q ...
- js基础——正则表达式
1.创建方式: var box = new RegExp('box');//第一个参数字符串 var box = new RegExp('box','ig');//第二个参数可选模式修饰符 等同于 v ...
- html2canvas生成图片报错处理办法
详见大佬博客链接: link.(https://www.jianshu.com/p/22bd5b98e38a) 需要注意的是要生成的网页中带的网络图片地址(如放在阿里云服务器图库的图片)经常有跨域报错 ...