mycat的切分规则

Posted 家园叮咚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mycat的切分规则相关的知识,希望对你有一定的参考价值。

1 mycat简介

       MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 mysql 协议 的服务器,前端用 户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协 议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核核心心功功能能是是分分库分表表。配合数据库的主从模式还可实现读写分离。MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。MyCat 发展到 目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持MySQLSQL ServerOracleDB2PostgreSQL 等主流数据库,也支持 MongoDB 这种新型NoSQL 方式的存储,未来还会支持更多类型 的存储。而在最终用户看来,无论是那种存储方式,在 MyCat 里,都是一个传统的数据库表,支持标准的 SQL 语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。简 单来说MyCat就是实现数据库集群的,对海海量量数数据据的数据存储的一种解决方案,因为很多数据库不想 Oracle一样自带集群的配置,那么在进行海量数据存储的时候就要使用到MyCat进行数据库的管理了。

2 mycat的切分规则

      mycat的配置总结 就是 通过schema配置数据库,而table则是配置需要连接的数据库, 其中table标签会指 dataNode中的namedataNode则指向dataHost;最后由dataHost配置好连接的服务器,但是注意在 table镖旗中的travelrecord需要留着,因为它的作用是来记录我们的操作的;在127的服务中有存在着test数据库其中就有一个t表;我们可以以它作为目标来接;

然后重启mycat的服务,再尝试着连接mycat 来看一下效果

mycat的切分规则

mycat的切分规则

然后再去127的服务器测试 发现也存在与数据;

比如我们以它配置的 company的信息来作操作演示,

mycat的切分规则

重启mycat, 然后连接mycat操作

mycat的切分规则

ERROR 1105 (HY000): backend connect: ConnectionException [code=1049, msg=Unknown database 'db2'] 这个错误主要是因为在127服务器中没有db2.db3的数据库产生的 ;因此我们需要去创建这两个数据 库,但是test是有的因此在127中的test数据库中是存在着创建成功的company

当我们重新创建好了db2db3之后就可以先在mycat删除原来创建表的操作;再执行创建就ok ,然后我们 开去 127MySQL服服务务器器 中查看:

mycat的切分规则

mycat的切分规则

解释:我们可以看到在每一个库中都会存在这个company这表,那也就是company的数据就来这三个库 中。我们可以尝试给三个库添加一条数据看追加在那个数据库的表中;注意一定是要在 mycat的的服务 中 执行

mycat的切分规则

mycat的切分规则

这是因为当前的company表设置是一个全局的,没有根据规则去分配;而是会选择所有的库都会去执行这 样的操作,那么如果我们查询呢?会不会出现三条这样的数据?

mycat的切分规则

可以看到只有一条数据

3.1 全局表

我们可以先做个演示;以配置文件中的

mycat的切分规则

mycat的切分规则

重启mycat

mycat的切分规则

在执行的时候可以看到存在着这样的异常;这个异常产生的原因主要是因为分区表需要有指定的字段去进 行分区表没有指定分区的字段;也就是说当前的employee表实际上就是一个分区表,根据了某一个字段进 行分区;而目前在当前的表中是没有这个字段产生的问题, 而这个分区的设置很显然是通过添加了 rule="sharding-by-intfile" 这个属性产生的;rule属性的作用就是定义分区的规则 -》 而“sharding-by-intfile” 则是分区的规则, 那么这个分区定义在哪 里?通过查看配置文件我们可以看导rule.xml;而这个配置文件则就是分片规则定义所在;

mycat的切分规则

打开配置文件可以看到是存在这么一个信息的, 而tableRule就是定义一个规则, name属性就是规则名;rule标签就是规则内容,columns标签则就是规则的字段,而algorithm是规则方式

因此实际上我们需要在employee表中添加sharding_id这个字段,数据类型int

alter table employee add column sharding_id int not null;

在添加完了字段之后我们可以来试试添加数据

mycat的切分规则

mycat的切分规则

如上操作演示之后我们可以看到employee在数据新增的时候根据sharding_id进行了数据的分区,而分区主 要是根据value 1000010010;并且字段列是必须要在insert 中指明的负责就无法实行;

对于数据进行查询

mycat中查询

mycat的切分规则

127中的MySQL 进行查询

那么这个规则如何定义的呢?在rule.xml中有如下的配置信息

其中制定了一个文件partition-hash-int.txt文件,我们可以看一下conf目录下的这个文件内容

10000=0

10010=1

可以看到有如上的配置;那么也就是说实际mycat的执行就是通过与根据sharding_id的值进行了if的判断选 择了对应的数据源节点;我们可以看看源码;在github中下载好源码 https://github.com/MyCATApache/Mycat-Server/releases

以上是关于mycat的切分规则的主要内容,如果未能解决你的问题,请参考以下文章

mycat的切分规则

MyCat水平分库

Mycat 数据切分

MySQL之分库分表(MyCat)

MySQL:如何使用MyCAT实现分库分表?

数据库性能提升利器—Mycat数据切分