MySQL分库分表之MyCat实现(五)
一 .分库分表
什么是分库分表?
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
2.分库分表的方式
2.1分库:
1.垂直分库:是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放不同的服务器上,它的核心理念是专库专用。
2水平分库:把同一个表的数据按一定规则拆分到不同的数据库中,每个库可以放不同的服务器上
2.2分表:
1.垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段
2.水平分表:在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。
二. MyCat实现
2.1 什么是MyCat?
MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。
MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得 MyCat 变得非常的强大.MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型NoSQL 方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在 MyCat 里,都是一个传统的数据库表,支持标准的 SQL 语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。
2.2 MyCat构架
2.3.MyCat关键特性
支持SQL92标准
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio实现,有效管理线程,高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持IP白名单
支持SQL黑名单、sql注入攻击拦截
支持分表(1.6)
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
2.4Mycat解决了哪些问题
连接过多导致应用竞争问题,mycat统一管理所有数据源,后端数据库对前端应用透明;
ER关系分片,解决ER分片难处理问题,提高夸节点join的效率;
采用全局分片技术,每个节点同时并发读取、插入和更新数据;
支持基于MySQL主从复制状态的高级读写分离控制机制;
全局表
HBT(Human Brain Tech)人工智能catlet
2.5 MyCAT技术原理
mycat拦截用户发送的SQL语句,对SQL做特定的分析如分片分析,路由分析,读写分离分析,缓存分析等,然后将SQL发往后端的真是数据库,并将返回结果做适当处理,最终返回给用户。
2.6.MyCAT的问题:
非分片字段查询
MyCAT中的路由结果是通过分片字段和分片方法来确定的,如果查询条件是分片字段,查询将路由到某个具体的分片上;如果查询条件没有分片字段,MyCAT无法计算路由,便发送到所有节点,随着节点的增多,会消耗更多的数据库资源;
分页排序问题:消耗大量的计算资源;
无法实现任意表join,必须确保相关联的表的关联字段具有相同的分布;
MyCat无法实现事务强一直性;
趋势:数据库应用已经普遍建立于计算机网络之上了
集中式数据库的不足
集中式处理势必造成存储和性能瓶颈
无法高可用;
系统的规模和配置都不够灵活,系统的可扩展性差
Amoeba专注于分布式数据库前端代理层,具有负载均衡,高可用,SQL过滤,读写分离,SQL路由,结果合并等功能,稳定性,性能和功能支持不够好,核心人员的离开
Cobar 基于Amoeba开发,稳定,可靠,优秀的架构设计2013年后没在更新
MyCat 基于Cobar开发,
解决数据存储和业务规模迅速增长的情况下的数据瓶颈问题;
单主机模式:LAMP服务都在一台主机上;
独立主机模式:将web服务器和MySQL服务器分开,分别部署独立主机模式;
读写分离:考虑业务实时性要求,写库不方便横向扩展;
业务垂直拆分:解决高并发下单库写入压力无法分担的问题,单库的压力还没有明显的缓解;
单业务库水平垂直切分:水平拆分横向扩展比较好,对查询挑战比较大;
业务垂直切分,业务无关的关键字水平拆分,不能无限扩展,确定好分库个数后基本不可添加