1.数据库垂直拆分
1.1)什么是垂直拆分
垂直拆分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面。
1.2)拆分的优缺点
优点:拆分后业务更清晰,数据和代码维护更简单。
缺点:表无法join,只能通过接口,事务处理复杂。
2.数据库水平拆分
2.1)什么是水平拆分
水平拆分不是将表做分类,而是按照某个字段的某种规则将同一个表的数据分散到多个库中,每个表包含一部分数据。
2.2)分片规则
- 按照用户ID求模,将数据分散到不同的数据库。
- 按照日期,将不同月甚至日的数据分散到不同的库中。
- 按照某个特定的字段求模,或者根据特定范围段分散到不同的库中。
2.3)拆分优缺点
优点:不存在单表大数据,性能瓶颈,提高了系统稳定性和负载能力。
缺点:分片规则不好把握,多次扩展难度较大。
3.mycat工作原理
mycat会拦截用户发送过来的SQL语句, 首先对SQL语句做了一些特定的分析: 如分片分析、路由分析、读写分离分析、缓存分析,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
4.几个重要概念
4.1)ER表
子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,这样可保证数据join不会有跨库操作。
4.2)全局表
一般变动不频繁, 数据量不大的表可定义为全局表, mycat通过数据冗余来解决这类表的join, 即所有的分片都有一份数据的拷贝。数据冗余是解决跨分片join的一种很好的思路。
4.3)全局序列号
数据切分后, 原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证全局性数据唯一性标识,这就是全局序列号。
5.mycat目录结构
5.1)bin目录
存放了一些可执行命令
5.2)conf目录
server.xml: mycat服务器参数调整和用户授权的配置
schema.xml: 逻辑库定义和表以及分片定义的配置
rule.xml: 分片规则的配置
5.3)lib目录
存放mycat依赖的一些jar文件