1、何为数据切分?
简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
切分模式:
A.垂直切分:针对产品功能拆分,现实是不同业务量是不一样的,没有考虑到用户行为;浪费了硬件,没有达到应该发挥的能力,有局限性。
B.水平切分:基于一个表的拆分,数据是均匀拆分到多个节点,可以并发读写数据;如果是业务上热点表;热点访问会被均匀拆分开,不管是读还是写。以上两种切分模式共同缺点:
1、引入分布式事务的问题
2、跨节点Join的问题
3、跨节点合并排序分页问题
切分原则:
1、尽量不拆分,架构是进化而来的,不是一蹴而就的;
2、最大可能的找到最合适的切分维度
3、由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join
4、尽量通过数据冗余,分组避免数据跨库多表Join.
5、尽量避免分布式事务
6、单表切分数据1000万以内
1.1 针对数据源管理,目前主要有两种思路:
A.客户端模式,在每个应用程序模块中配置管理自己需要的一个或多个数据源,直接访问各个数据库,在模块内完成数据的整合。
优点:相对简单,无性能损耗。
缺点:不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂。B.通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明。
优点:通用,对应用透明,改造少。
缺点:实现难度大,有二次转发性能损失。
1.2 企业级的分布式策略
要达到的目的:
- 数据量要均匀
- 业务访问要均匀
- 高可用策略
- 降低耦合
- 具备单节点的所有SQL功能
- 可选择多种分片策略
2、MyCAT基础架构图
2.1 Mycat功能特性
支持Mysql集群,可以作为proxy使用
自动故障切换,高可用性
支持读写分离,支持Mysql双主多从、一主多从的模式
2.2 Mycat原理
拦截用户发过来的SQL语句,首先对SQL语句做了一些特定的分析,比如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
2.3 Mycat应用场景
1、单纯的读写分离,此时配置最为简单,支持读写分离、主从切换、分库分表,对于超过1000万的表进行分片,最大支持1000亿的单表分片
2、多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化
3、报表系统,借助于Mycat分表能力,处理大规模报表的统计