16

MySQL之分库分表(MyCAT实现)

 4 years ago
source link: http://www.cnblogs.com/dzlj/p/12163448.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

分库分表介绍

随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。

数据的切分分为两种:

垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中。

j6R3iqJ.png!web

水平切分:将一张大表按照一定的切分规则,按照行切分到不同的表或者不同的库中。

6BbEjqb.png!web

MyCAT介绍

官方网站: http://www.mycat.org.cn/

什么是MyCAT?

简单的说,MyCAT就是:

  • 一个彻底开源的,面向企业应用开发的“大数据库集群”
  • 支持事务、ACID、可以替代Mysql的加强版数据库
  • 一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。

MyCAT的关键特性

  1. 支持 SQL 92标准
  2. 支持Mysql集群,可以作为Proxy使用
  3. 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL  Server使用
  4. 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群
  5. 自动故障切换,高可用性
  6. 支持读写分离,支持Mysql双主多从,以及一主多从的模式
  7. 支持全局表,数据自动分片到多个节点,用于高效表关联查询
  8. 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询
  9. 多平台支持,部署和实施简单

MyCAT架构

NbuM32J.png!web

uUV36jn.png!web

MyCAT核心概念

  1. Schema:由它指定逻辑数据库
  2. Table:逻辑表
  3. DataNode:真正存储节点
  4. DataHost:真正的数据库主机

Mycat存在的问题

跨库join问题

  • 通过业务分析,将不同库的join查询拆分成多个select
  • 建立全局表(每个库都有一个相同的表)
  • 冗余字段(不符合数据库三范式)
  • E-R分片(将有关系的记录都存储到一个库中)
  • 最多支持跨两张表跨库的join

分布式事务(弱事务)

  • 强一致性事务(同步)
  • 最终一致性事务(异步思想)

分布式主键

  • redis incr命令
  • 数据库(生成主键)
  • UUID
  • snowflake算法

1.1      分片策略

MyCAT支持水平分片与垂直分片:

  • 水平分片:一个表格的数据分割到多个节点上,按照行分隔。
  • 垂直分片:一个数据库中多个表格A,B,C,A存储到节点1上,B存储到节点2上,C存储到节点3上。

zMBnumA.png!web

MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。

  1. Schema :逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
  2. Table :表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。 在此可以指定表的分片规则。
  3. DataNode :MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
  4. DataSource :定义某个物理库的访问地址,用于捆绑到Datanode上

Mycat读写分离

MyCat的读写分离是建立在MySQL主从复制基础之上实现的。

数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置

b2mi6zv.png!web

Mycat读写分离和自动切换机制,需要mysql的主从复制机制配合。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK