分库分表之MyCat实现
分库分表介绍
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。
数据的切分分为两种:
l 垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中。
l 水平切分:将一张大表按照一定的切分规则,按照行切分到不同的表或者不同的库中。
垂直
垂直分表定义 :将一个表按照字段分成多表,每个表存储其中一部分字段。
它带来的提升是 :
1.为了避免IO争抢并减少锁表的几率,查看详情的用户与商品信息浏览互不影响。
2.充分发挥热门数据的操作效率,商品信息的操作的高效率不会被商品描述的低效率所拖累。
垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放不同的服务器上,
它带来的提升是 :
1.解决业务层面的耦合,业务清晰
2.能对不同业务的数据进行分级管理、维护、监控、扩展等
水平
水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。
它带来的提升是 :
1.优化单一表数据量过大而产生的性能问题
2.避免IO争抢并减少锁表的几率
库内的水平分表,解决来单一表数据量过大的问题,分出来的小表中只包含一部分数据,从而使得单个表的数据量变小,提高检索性能。
水平分库是把同一个表的数据按一定规则拆分到不同的数据库中,每个库可以放不同的服务器上。
1.解决来单库大数据,高并发的性能瓶颈。
2.提高来系统的稳定性及可用性。
稳定性体现在IO冲突减少,锁定减少,可用性指某个库出问题,部分可用。
MyCAT介绍
简单的说,MyCAT就是:
·一个彻底开源的,面向企业应用开发的“大数据库集群”
·支持事务、ACID、可以替代Mysql的加强版数据库
·一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群
·一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server
·结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
·一个新颖的数据库中间件产品
MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
MyCAT架构
核心概念
l Schema:由它指定逻辑数据库
l Table:逻辑表
l DataNode:真正存储节点
l DataHost:真正的数据库主机
1.1.1 Mycat存在的问题
l 跨库join问题
* 通过业务分析,将不同库的join查询拆分成多个select
* 建立全局表(每个库都有一个相同的表)
* 冗余字段(不符合数据库三范式)
* E-R分片(将有关系的记录都存储到一个库中)
* 最多支持跨两张表跨库的join
l 分布式事务(弱事务)
* 强一致性事务(同步)
* 最终一致性事务(异步思想)
l 分布式主键
* redis incr命令
* 数据库(生成主键)
* UUID
* snowflake算法
Mycat解决的问题
l 海量数据存储
l 查询优化
Mycat对多数据库的支持