MyCat - 数据库中间插件
什么是MyCat
是目前最流行的分布式数据库中间插件
为什么使用MyCat
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。
但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat
• 综上所述:Mycat作用为:能满足数据库数据大量存储;提高了查询性能
原理
可以用“拦截”一词形容,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析等,然后将此sql发往后端的真实数据库,并将返回的结果做适当处理,最终返回给用户。
前端用户可以把mycat看作是一个数据库代理,用mysql客户端工具(如Navicat)和命令访问,而后端支持mysql,sqlserver,oracle等主流数据库,用mysql native 协议和多个mysql服务器通信,也可用JDBC协议与大多数主流数据库服务器通信,其核心功能就是分库分表,即将一个大表水平分割为N个小表,真正的存储在后端Mysql服务器中或其它数据库中
分片
数据库分片指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式:
• 垂直切片
将不同的表切分到不同的数据库中
• 水平切片
将同一种表按照某种条件切分到不同的数据库中(这种方式最常用)
水平分片【最常用的,因此用这个】
MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法
• 1.Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
• 2.Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。
• 3.DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
• 4.DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上
配置文件详解
mycat主要有3个配置文件,rule.xml,schema.xml和server.xml
rule.xml配置文件
该文件主要定义了分片的规则,这个文件里面主要有tableRule和function这两个标签。在具体使用过程中可以按照需求添加tableRule和function
tableRule标签:
<tableRule name="auto-sharding-long"><rule>
<columns>id</columns>
<algorithm>rang-long</algorithm></rule></tableRule>
name:用户标识不同的分表规则
columns:指定按哪一列进行拆分
algorithm:该属性值为下面function标签中
name的属性值,定义了连接表规则的具体的路由算法,多个表规则可以连接到同一个路由算法上
function标签
<function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
<property name="mapFile">autopartitionlong.txt</property>
</function>
name:标识算法的名字
class:指定路由算法具体的类名字
property:具体算法用到的一些属性
schema.xml 配置文件
该文件是MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource
举例:
• <?xml version="1.0"?>
• <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
• <mycat:schema xmlns:mycat="http://org.opencloudb/">
• <schema name="e3mall" checkSQLschema="false" sqlMaxLimit="">
• <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
• </schema>
• <dataNode name="dn1" dataHost="localhost1" database="db1" />
• <dataNode name="dn2" dataHost="localhost1" database="db2" />
• <dataNode name="dn3" dataHost="localhost1" database="db3" />
• <dataHost name="localhost1" maxCon="" minCon="" balance="" writeType="" dbType="mysql" dbDriver="native" switchType="" slaveThreshold="">
• <heartbeat>select user()</heartbeat>
• <writeHost host="hostM1" url="192.168.20.216:3306" user="root" password="root">
• </writeHost>
• </dataHost>
• </mycat:schema>
schema标签:定义mycat实例中的逻辑库
table标签:定义mycat实例中的逻辑表
dataNode标签:定义mycat中的数据节点,也是通常说的数据分片
dataHost标签:作为最底层标签存在,定义了具体的真正存放数据的数据库实例,读写分离配置和心跳语句,我这只用来一台主键,所以只配了一个dataHost,如果你配了N个主机,就要配N个dataHost节点
server.xml配置文件
• !DOCTYPE mycat:server SYSTEM "server.dtd">
• <mycat:server xmlns:mycat="http://org.opencloudb/">
• <system>
• <property name="defaultSqlParser">druidparser</property>
• </system>
• <user name="user">
• <property name="password">user</property>
• <property name="schemas">e3mall</property>
• <property name="readOnly">false</property>
• </user>
• </mycat:server>
• system标签:内嵌的所有property标签都与系统配置有关
• defaultSqlParser:指定默认的解析器(如解析sql),目前的可用的取值有:druidparser和fdbparser。使用的时候可以选择其中的一种,目前一般都使用druidparser
• user标签
• name:逻辑用户名,即登录mycat的用户名
• password:逻辑密码,即登录mycat的用户名对应的密码
• schemas:逻辑数据库,可配置多个,用英文逗号隔开,对应于schema.xml文件中配置的逻辑数据库,两者对应
• readOnly:该数据库是否为只读,如果true就是只读
常见分片算法
枚举法
<tableRule name="sharding-by-intfile">
<rule>
<columns>user_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type"></property>
<property name="defaultNode"></property>
</function>
partition-hash-int.txt 配置:
=
=
上面columns 标识将要分片的表字段,algorithm 分片函数,
其中分片函数配置中,mapFile标识配置文件名称,type默认值为0,0表示Integer,非零表示String,
所有的节点配置都是从0开始,及0代表节点1
defaultNode: 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点,结点为指定的值 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点 如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到 不识别的枚举值就会报错 :like this:can't find datanode for sharding column:column_name val:ffffffff
固定分片hash算法
<tableRule name="rule1">
<rule>
<columns>user_id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<function name="func1" class="io.mycat.route.function.PartitionByLong">
<property name="partitionCount">,</property>
<property name="partitionLength">,</property>
</function>
配置说明:
上面columns 标识将要分片的表字段,algorithm 分片函数,
partitionCount 分片个数列表,partitionLength 分片范围列表 分区长度:默认为最大2^n=1024 ,即最大支持1024分区
约束 : count,length两个数组的长度必须是一致的。 1024 = sum((count[i]*length[i])). count和length两个向量的点积恒等于1024
求模法
<tableRule name="mod-long">
<rule>
<columns>user_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count"></property>
</function>
配置说明:
上面columns 标识将要分片的表字段,algorithm 分片函数,
此种配置非常明确即根据id与count(你的结点数)进行求模预算,相比方式1,此种在批量插入时需要切换数据源,id不连续
MyCat - 数据库中间插件的更多相关文章
- Ocelot简易教程(七)之配置文件数据库存储插件源码解析
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...
- FastAdmin 数据库备份插件更新到 v1.0.4
FastAdmin 数据库备份插件更新到 v1.0.4 下载地址: https://www.fastadmin.net/store/database.html 更新如下: 修复了忽略列表无效的 Bug ...
- JAVAEE——宜立方商城13:订单系统实现、订单生成、Mycat数据库分片
1. 学习计划 1.订单系统实现 2.订单生成 3.Mycat数据库分片 2. 订单系统 2.1. 功能分析 1.在购物车页面点击“去结算”按钮,跳转到订单确认页面 a) 必须要求用户登录 b) 使用 ...
- MyCat数据库的基础配置及使用
一.为什么需要分布式数据据库 随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技术和信息系统的处理 ...
- 三调数据库标注插件v1.3
三调数据库标注插件 插件介绍: 本插件基于VS2010+ARCGIS Addin 开发,高效率处理三调数据,可以标注相关属性.检查尖角.检查节点平均密度.检查地类图斑属性一致性,方便数据导入建库软件之 ...
- mycat数据库集群系列之数据库多实例安装
mycat数据库集群系列之数据库多实例安装 最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据 ...
- Mycat 数据库分库分表中间件
http://www.mycat.io/ Mycat 国内最活跃的.性能最好的开源数据库中间件! 我们致力于开发高性能的开源中间件而努力! 实体书Mycat权威指南 »开源投票支持Mycat下载 »s ...
- Dubbo学习系列之十三(Mycat数据库代理)
软件界有只猫,不用我说,各位看官肯定知道是哪只,那就是大名鼎鼎的Tomcat,现在又来了一只猫,据说是位东方萌妹子,暂且认作Tom猫的表妹,本来叫OpencloudDB,后又改名为Mycat,或许Ca ...
- Windows环境Mycat数据库分库分表中间件部署
下载地址MYCAT官方网站 jdk安装配置 首先去oracle官网下载并安装jdk8,添加环境变量,JAVA_HOME设置为D:\Worksoftware\Java\jdk1.8 CLASSPATH设 ...
随机推荐
- .NETCore websocket
.NETCore websocket 实现简易.高性能.集群即时通讯组件,支持点对点通讯.群聊通讯.上线下线事件消息等众多实用性功能. https://github.com/2881099/im
- dubbo源码分析- 集群容错之Cluster(一)
1.集群容错的配置项 failover - 失败自动切换,当出现失败,重试其他服务器(缺省),通常用于读操作,但重试会带来更长的延时. failfast - 快速失效,只发起一次调用,失败立即报错.通 ...
- 【转载】 tf.Print() (------------ tensorflow中的print函数)
原文地址: https://blog.csdn.net/weixin_36670529/article/details/100191674 ------------------------------ ...
- 【GMT43智能液晶模块】例程十九:LAN_DHCP实验——动态分配IP地址
源代码下载链接: 链接:https://pan.baidu.com/s/19Euul9LYFKYdKdXTRBfx5w 提取码:p6k8 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...
- 由crt和key文件生成keystore文件
该图转自知乎 海棠依旧 1.先生成p12文件,生成的时候需要指定密码 openssl pkcs12 -export -in your_crt.crt -inkey your_key.key -out ...
- java Random 抢红包算法
红包有一个总金额和总数量,领的时候随机分配金额. 维护一个剩余总金额和总数量,分配时,如果数量等于1,直接返回总金额,如果大于1,则计算平均值,并设定随机最大值为平均值的两倍,然后取一个随机值,如果随 ...
- 【CUDA开发-并行计算】NVIDIA深度学习应用之五大杀器
来自吉浦迅科技 整理发布 http://mp.weixin.qq.com/s?__biz=MjM5NTE3Nzk4MQ==&mid=2651231163&idx=1&sn=d4 ...
- [ARM-Linux开发]Linux open函数
Linux open函数 open 函数用于打开和创建文件.以下是 open 函数的简单描述 #include <fcntl.h> int open(const char *pathnam ...
- 如何在jupyter中使用Python2和Python3
首先通过 pip2 install ipython notebook pip3 install ipython notebook 分别安装ipython notebook,安装命令还是推荐使用国内的豆 ...
- 在 Java 中不使用多余变量交换两个字符串
在 Java 中不使用多余变量交换两个字符串 public class Test { public static void main(String[] args) { String a = " ...