MySQL分库分表之MyCat实现(五)

一 .分库分表

  1. 什么是分库分表?

    分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

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服务器分开,分别部署独立主机模式;

读写分离:考虑业务实时性要求,写库不方便横向扩展;

业务垂直拆分:解决高并发下单库写入压力无法分担的问题,单库的压力还没有明显的缓解;

单业务库水平垂直切分:水平拆分横向扩展比较好,对查询挑战比较大;

业务垂直切分,业务无关的关键字水平拆分,不能无限扩展,确定好分库个数后基本不可添加

原文地址:https://www.cnblogs.com/limengcheng/p/12142136.html

时间: 2024-11-05 19:31:51

MySQL分库分表之MyCat实现(五)的相关文章

MySQL分库分表之MyCat实现

分库分表之MyCat实现 分库分表介绍 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库.单一数据表的数据量变小,从而达到提升数据库性能的目的.随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: l 垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中. l 水平切分:将一张大表按照一定的切分规则

【分库、分表】MySQL分库分表方案

一.Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作. 2. mysql proxy:amoeba 做mysql集群,利用amoeba. 从上层的ja

分库分表之Mycat实现

分库分表之Mycat实现 使用分库分表的前提: 当你们的数据库表数据特别大时,比如说上亿的记录,数据库本身的优化基本上无法解决性能问题了,根本原因是数据库本身的io读写到了一个瓶颈,这个时候,需要海量数据的存储和查询问题.此时我们需要利用分库分表的思想去进行数据库的架构优化.随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库.  什么是Mycat? 一个彻底开源的,面向企业应用开发的“大数据库集群” ·支持事务.ACID.可以替代

MySQL分库分表方案

1. MySQL分库分表方案 1.1. 问题: 1.2. 回答: 1.2.1. 最好的切分MySQL的方式就是:除非万不得已,否则不要去干它. 1.2.2. 你的SQL语句不再是声明式的(declarative) 1.2.3. 你招致了大量的网络延时 1.2.4. 你失去了SQL的许多强大能力 1.2.5. MySQL没有API保证异步查询返回顺序结果 1.2.6. 总结 MySQL分库分表方案 翻译一个stackoverflow上的问答,关于分库分表的缺点的,原文链接: MySQL shard

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

OneProxy实现MySQL分库分表

OneProxy实现MySQL分库分表 简介 Part1:写在最前 随着网站的壮大,MySQL数据库架构一般会经历一个过程: 当我们数据量比较小的时候,一台单实例数据库足矣.等我们数据量增大的时候,我们会采用一主多从的数据库架构来降低我们的读写io.当我们某张业务表达到几百万上千万甚至上亿时,就应该去进行分表处理.本文演示OneProxy对数据库实现分表处理,对前端应用是透明的. Part2:环境简介 HE1:192.168.1.248 Master1 HE3:192.168.1.250 Mas

MYSQL分库分表

1 基本思想之什么是分库分表? 从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上. 2 基本思想之为什么要分库分表? 数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据 操作,增删改查的开销也会越来越大:另外,由于无法进行分布式式部署,而一台服务器的资源(CPU.磁盘.内存.IO等)是有限的,最终数据库所能承载的 数据量.数据处理能力都将遭遇瓶颈.

MYSQL分库分表和不停机更改表结构

在MYSQL分库分表中我们一般是基于数据量比较大的时间对mysql数据库一种优化的做法,下面我简单的介绍一下mysql分表与分库的简单做法. 1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群: