

MySQL之分库分表(MyCAT实现)
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.

分库分表介绍
随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。
数据的切分分为两种:
垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中。
水平切分:将一张大表按照一定的切分规则,按照行切分到不同的表或者不同的库中。
MyCAT介绍
官方网站: http://www.mycat.org.cn/
什么是MyCAT?
简单的说,MyCAT就是:
- 一个彻底开源的,面向企业应用开发的“大数据库集群”
- 支持事务、ACID、可以替代Mysql的加强版数据库
- 一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群
- 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
- 一个新颖的数据库中间件产品
MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
MyCAT的关键特性
- 支持 SQL 92标准
- 支持Mysql集群,可以作为Proxy使用
- 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用
- 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群
- 自动故障切换,高可用性
- 支持读写分离,支持Mysql双主多从,以及一主多从的模式
- 支持全局表,数据自动分片到多个节点,用于高效表关联查询
- 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询
- 多平台支持,部署和实施简单
MyCAT架构
MyCAT核心概念
- Schema:由它指定逻辑数据库
- Table:逻辑表
- DataNode:真正存储节点
- DataHost:真正的数据库主机
Mycat存在的问题
跨库join问题
- 通过业务分析,将不同库的join查询拆分成多个select
- 建立全局表(每个库都有一个相同的表)
- 冗余字段(不符合数据库三范式)
- E-R分片(将有关系的记录都存储到一个库中)
- 最多支持跨两张表跨库的join
分布式事务(弱事务)
- 强一致性事务(同步)
- 最终一致性事务(异步思想)
分布式主键
- redis incr命令
- 数据库(生成主键)
- UUID
- snowflake算法
1.1 分片策略
MyCAT支持水平分片与垂直分片:
- 水平分片:一个表格的数据分割到多个节点上,按照行分隔。
- 垂直分片:一个数据库中多个表格A,B,C,A存储到节点1上,B存储到节点2上,C存储到节点3上。
MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。
- Schema :逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
- Table :表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。 在此可以指定表的分片规则。
- DataNode :MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
- DataSource :定义某个物理库的访问地址,用于捆绑到Datanode上
Mycat读写分离
MyCat的读写分离是建立在MySQL主从复制基础之上实现的。
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置
Mycat读写分离和自动切换机制,需要mysql的主从复制机制配合。
Recommend
-
61
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 my...
-
17
mycat是一种非常流行的分布式数据库中间插件,mycat的作用为满足数据库的大量存储,提高了查询性能,从架构的角度来理解就是前端用户可以把mycat看作是一个数据库的代理,核心功能是分库分表,即将一个大表水平分割为n个小表。 ...
-
19
MySQL中间件之MyCat 一、MyCat基础概念 1、什么是MyCat 一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群的企业级数据库,用来替...
-
13
我所理解的MySQL(六)分库分表与主从同步 Planeswalker23 2020年11月11日 共8,255字 101次浏览
-
14
mysql 分库分表mysql 分库分表 分库分表时机 当业务量小的时候,我们不需要去关注数据库存储的数据多少,当业务量大的时候,单个表的行数有几百万的时候,我们需要考虑分库分表。 根据业务增常量,推算出分库的片数...
-
8
浅议 EF Core 分库分表及多租户架构的实现2021-03-2748 31 min.各位朋友,大家好,我是 Payne,欢迎大家关注我的博客,我的博客地址是:https://blog.yuanpei.me。最近这段时间,我一直在学习
-
6
JPA分库分表实现 在开始本篇的讲解之前,我先来说下之前写过的两篇博文【现在已弃用】: flea-frame-db使用之基于EntityManager实现JPA分表的数据库操作【旧】...
-
4
分库分表实战之从根上带你吃透MySQL的索引 作者:石杉的架构笔记 2022-10-13 17:43:10 在磁盘中,MySQL存放数据的基本单位是数据页,数据是放在数据页中的,每个数据页中都有很多的数据行。
-
9
springboot~sharding-jdbc实现分库分表 当mysql数据库单...
-
5
一、按天分片 指定一个时间周期,将数据写入一个数据节点中,例如:第1-10天的数据,写入到第一个数据节点中,第2-20天的数据写入到第二个节点中,第3-30天的数据节点写入到第三个数据节点中。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK