MySQL分库分表之MyCat实现

分库分表之MyCat实现

分库分表介绍

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。

数据的切分分为两种:

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

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

垂直

垂直分表定义 :将一个表按照字段分成多表,每个表存储其中一部分字段。
它带来的提升是 :
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解决的问题

海量数据存储

查询优化

 Mycat对多数据库的支持

原文地址:https://www.cnblogs.com/wu-yi/p/12133353.html

时间: 2024-08-29 22:40:13

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

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

一 .分库分表 什么是分库分表? 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库.单一数据表的数据量变小,从而达到提升数据库性能的目的. 2.分库分表的方式 2.1分库: 1.垂直分库:是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放不同的服务器上,它的核心理念是专库专用. 2水平分库:把同一个表的数据按一定规则拆分到不同的数据库中,每个库可以放不同的服务器上 2.2分表: 1.垂直

分库分表之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   也可以加入架构师交流群:

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

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