1.MyCat分库分表
数据库分表分库原则遵循 垂直拆分与水平拆分。
1.1 垂直拆分
垂直拆分就是根据不同的业务,分为不同的数据库,比如会员数据库、订单数据库、支付数据库等,垂直拆分在大型电商系统中用的非常常见。
优点:
- 拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。
缺点:
- 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
- 存在分布式事务问题。
1.2 水平拆分
垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。
相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。
简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式。水平切分提高了系统的稳定性跟负载能力,但是跨库join性能较差。
2.MyCat实现水平分片策略
MyCat支持10种分片策略
- 求模算法
- 分片枚举
- 范围约定
- 日期指定
- 固定分片hash算法
- 通配取模
- ASCII码求模通配
- 编程指定
- 字符串拆分hash解析
详情参考:http://www.mycat.io/document/mycat-definitive-guide.pdf
2.1 案例
分片枚举这种规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国的省份区县固定的,这类业务使用这一规则。配置如下:
1.案例步骤:
- 创建数据库userdb_1 、 userdb_2、userdb_3
2.修改partition-hash-int.txt 规则
wuhan=0
shanghai=1
suzhou=2
3.根据地区进行分库 湖北数据库、江苏数据库 山东数据库。
4.求摸法分片,根据id进行十进制求摸运算,运算结果为分区索引 。
注意:数据库节点分片数量无法更改。 和ES集群非常相似的。下图是ES集群原理图,数据库节点分片(求模算法)类似ES的文档分库,详情可以参考之前我写的博客《分布式系列教程(36) -ElasticSearch集群原理》