Mycat是一个彻底开源的,面向企业应用开发的大数据库集群。它的定义是是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
Mycat用于分库分表,有垂直拆分和水平拆分两种方式:
水平拆分:就是表一张表的数据给弄到多个库的多个表进行保存,但是每个库里面的表结构都是一样的,只不过每个库表放的数据不同,所有库表的数据加起来就是全部数据。
垂直拆分:就是一个表有很多字段,给拆分到多个表中或者是多个库上去。每个库表的数据表结构都不同,每个库表只包含部分字段。
下面看看如何实现mycat的数据分片
启动mycat
配置需要分库的表和目标数据库,分片规则
Mycat的分片规则包括连续分片和离散分片,这里选择连续分片,连续分片常见的方式有自定义数字范围分片、按日期(天)分片、按单月小时分片、自然月分片;离散分片主要有枚举分片、十进制求模分片、字符串hash分片、一致性哈希分片
这里采用的是mycat默认的分片规则: 以500万为单位,实现分片规则.
逻辑库A对应dataNode - db1和db2.1-500万保存在db1中, 500万零1到1000万保存在db2中,1000万零1到1500万保存在db3中。
三个数据库节点
配置两个服务器节点
Server.xml:设置连接mycat的用户名和密码
用连接mysql的方式连接mycat,新建一张tb_item表
逻辑库的tb_item表同步到了三个db1、2、3数据库
插入多条数据,实现了基于id的分片效果