数据分片概述
相关概念
分库/分表
什么是分库分表
-将存放在一台数据库服务器中的数据,按照特定方式进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果
水平分割
横向切分
-按照表中制定字段的分片规则,将表记录按行切分,分散存储到多个数据库中
垂直分割
纵向切分
-将单个数据库的多个表按业务类型分类,分散存储到不同的数据库中
MyCAT介绍
软件介绍
mycat是基于Java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案
- 适合数据大量写入的存储需求
- 支持MySQL,Oracle、Sqlserver、Mongodb等
- 提供数据读写分离服务
- 提供数据分片服务
- 基于阿里巴巴Cobar进行研发的开源软件
分片规则
mycat支持提供10中分片规则
工作过程
当mycat收到一个SQL命令时
- 解析SQL命令涉及到的表
- 然后看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获得分片列表
- 然后将SQL命令发往对应的数据库服务器去执行
- 最后收集和处理所有分片结果数据,并返回到客户端
部署MyCAT服务
环境部署
拓扑结构
IP规划
部署MyCAT服务
安装软件
目录结构
重要配置文件说明
创建连接用户
/usr/local/mycat/conf/server.xml
-定义客户端连接mycat服务的用户
配置数据分片
定义分片的表
/usr/local/mycat/conf/schema.xml
定义数据节点
定义数据库服务器IP地址及端口
配置数据库服务器
根据分片配置做出相应的设置
-添加授权用户
-创建存储数据的库db1,db2,db3
启动服务
客户端连接
客户端连接分片服务器存取数据
- 连接
- 选择库
- 建表
- 插入记录
分片规则
sharding-by-intfile
枚举法
-字段必须在规则文件定义的值里选择
mod-long
求模法
根据字段值与设定的数字求模结果存数据
存储数据
建表
根据分片规则和对应算法创建表结构
存储数据
存储数据时必须制定字段名列表
添加新库/表
服务器配置
添加新库
-修改server.xml文件
添加新表
-修改schema.xml
客户端访问
客户端连接分片服务器
-建表
-存储数据