一.数据分片
1.水平切分
按照某个字段的某种规则分散到多个节点库,每个节点库包含一部分数据.从分布式整体来看他们是一个整体的表.
优点:
- 单库单表保持一定的量级,提高性能.
- 切分表结构相同,应用层改动少,只需要增加路由规则即可.
- 提高了系统的稳定性和负载能力.
2.垂直切分
按照业务将表进行分类并分布到不同的节点上.拆分简单明了,应用模块清晰,明确,容易整合,但是某个表的数据量达到一定程度后扩展比较困难.
优点:
- 拆分后业务清晰,拆分规则明确.
- 系统之间整合或扩展容易
- 可按照成本、应用的等级、类型等把表放到不同的机器上,便于管理.
- 便于实现动静分离、冷热分离的数据库表的设计模式.
- 数据维护简单.
共同的缺点:
- 部分业务表无法Join,只能通过接口方式解决.
- 分布式事物不易处理
- 存在跨节点合并排序、分页的问题
- 存在多数据源管理的问题
组件 | client/server | 耦合度 | 分库分表 | 备注 |
mycat | server | 无 | 分库 | 分表时链接不会及时释放 |
zdal | client | 高 | 分库and分表 | 侵入性大 |
二.3种分片方案
1.客户端分片
使用分库分表的数据库应用层直接操作分片逻辑,一般通过jar包实现,具有一定的侵入性.具体的实现方式 分为三种:应用层实现、定制JDBC协议实现、定制ORM框架实现.
2.代理分片
在应用层和数据库层增加了代理层,路由分片的规则配置在代理层.应用层的开发人员专注于业务逻辑即可.但是会影响性能,提高了硬件成本和运维成本. 代表:Mycat.
3.支持事物的分布式数据库