当前位置:首页 > 数据库 > MySQL之分库分表(MyCat)

MySQL之分库分表(MyCat)

2022年11月07日 15:07:39数据库12

分库分表介绍:

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

MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

 

数据的切分分为两种:

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

MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

 

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

MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

 MyCat介绍:

网站链接:http://www.mycat.io/

关键特性

  • 支持SQL92标准
  • 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
  • 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
  • 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
  • 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  • 基于Nio实现,有效管理线程,解决高并发问题。
  • 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
  • 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
  • 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
  • 支持多租户方案。
  • 支持分布式事务(弱xa)。
  • 支持XA分布式事务(1.6.5)。
  • 支持全局序列号,解决分布式下的主键生成问题。
  • 分片规则丰富,插件化开发,易于扩展。
  • 强大的web,命令行监控。
  • 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 支持密码加密
  • 支持服务降级
  • 支持IP白名单
  • 支持SQL黑名单、sql注入攻击拦截
  • 支持prepare预编译指令(1.6)
  • 支持非堆内存(Direct Memory)聚合计算(1.6)
  • 支持PostgreSQL的native协议(1.6)
  • 支持mysql和oracle存储过程,out参数、多结果集返回(1.6)
  • 支持zookeeper协调主从切换、zk序列、配置zk化(1.6)
  • 支持库内分表(1.6)
  • 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)

什么是MYCAT:

简单的说,MyCAT就是:

·一个彻底开源的,面向企业应用开发的“大数据库集群”

·支持事务、ACID、可以替代Mysql的加强版数据库

·一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群

·一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

·结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

·一个新颖的数据库中间件产品

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

MyCAT架构:

MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

 MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

 

Schema:由它指定逻辑数据库

Table:逻辑表

DataNode:真正存储节点

DataHost:真正的数据库主机

如图所示:MyCAT使用Mysql的通讯协议模拟成了一个Mysql服务器,并建立了完整的Schema(数据库)、Table (数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNodeMySQL Instance)上的真实物理库中,这样一来,所有能使用Mysql的客户端以及编程语言都能将MyCAT当成是Mysql Server来使用,不必开发新的客户端协议。

Mycat存在的问题

跨库join问题

通过业务分析将不同库的join查询拆分成多个select

建立全局表(每个库都有一个相同的表)

冗余字段(不符合数据库三范式)

* E-R分片(将有关系的记录都存储到一个库中)

最多支持跨两张表跨库的join

分布式事务(弱事务)

强一致性事务(同步)

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

分布式主键

* redis incr命令

数据库(生成主键)

* UUID

* snowflake算法

 Mycat读写分离

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

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

 MySQL之分库分表(MyCat) _ JavaClub全栈架构师技术笔记

 

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

作者:Caoner
来源链接:https://www.cnblogs.com/caocw/p/12134069.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/68368.html

分享给朋友:

“MySQL之分库分表(MyCat)” 的相关文章

mysql 查询数据库内存大小

mysql 查询数据库内存大小

查询某个数据库,指定数据库名:打开information_schema,在它之下查询 select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables whe...

MySQL 查询结果中增加字段的方法

例如我查出来的结果: | 字段1 | 字段2 | | 值1 | 值2 | 我想要在结果集中增加一个字段,这个字段是表中没有的,值是固定的,例如: | 字段1 | 字段2 | 新增字段 | | 值1 | 值2 | 值固定 |...

shell简单处理mysql查询结果

首先理清要了解shell脚本的数组与字符串的一些特性: str=("hello" "world" "!") #结果: str: 3 #普通的字符串数组 echo "str: " ${#str[@]} str1=("hello world !")...

Mysql 查询区分大小写的两种方法

oracle中查询默认是区分大小写的,但是在mysql中默认不区分大小写。     解决办法: mysql可以在SQL语句中加入 binary来区分大小写。BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符...

mysql 查询某字段最小的记录

根据我所遇到的应用情况,总结了以下3中简单的语句 1. select *,(select field from table t2 order by field) s from table t1  2. select t1.* from table...

59面试常问:MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)

59面试常问:MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)

  About MySQL MySQL(读作/maɪ ˈsiːkwəl/“My Sequel”)是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,目前为Oracle旗下产品。 被甲骨文公司收购后,自由软件社群们...

MySQL查询优化

MySQL查询优化

一、查询优化 1.1 小表驱动大表 永远小表驱动大表,类似嵌套循环Nested Loop EXISTS SELECT ... FROM table WHERE EXISTS (subquery) 该语法可以理解为。将主查询的数...

MySQL查询请求执行过程分析

MySQL查询请求执行过程分析

目录 第一部分:连接管理 第二部分:解析与优化 查询缓存 语法解析 查询优化 第三部分:存储引擎 备注关于存储引擎的一些基本的操作 参考资料: 备注:只从一个整体上理解执行过程,过于细节的暂时不做分析。 MYSQ...

mysql 查询练习——计算总订单价格大于100的订单号和总订单价格

mysql 查询练习——计算总订单价格大于100的订单号和总订单价格

问题:查询总订单价格大于100的订单号和总订单价格,SQL语句如下: 答案:SELECT o_num,  SUM(quantity *item_price) AS orderTotal FROM orderitems GRO...

mysql查询 根据月份查询每天的数据 没有数据显示0

mysql查询 根据月份查询每天的数据 没有数据显示0

  mysql 查询 年月 每天的数据 没有数据的为0   表名 ceshi   查询2017年11月份每天的shuliang的和   SELECT DATE_FORMAT( le...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。