mycat——数据库中间件

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

一.什么是MyCat?

MyCat是目前最流行的基于Java语言编写数据库中间件,是一个实现了MySql协议的服务器,其核心功能是分库分表。配合数据库的主从模式还可以实现读写分离
MyCat官网:http://www.mycat.io/

二、使用MyCat后的架构图

http://www.mycat.org.cn/img/1.png

三、使用MyCat的优势

1、数据量级

单一的MySql数据存储量和操作量级有限,
MyCat可以管理若干MySql数据库,可以实现数据库的存储和操作。

2 、开源性质

Mycat 是 java 编写的中间件,开源,免费
有非常多的人和组织对 Mycat 实行开发、维护、管理、更新
Mycat 是阿里原应用 corba 转型而来的

四、MyCat中的概念

1.切分

逻辑上的切分,在物理层面使用多库(database)、多表(table)实现切分。

1.1 纵向切分/垂直切分

就是把原来存储在一个库的数据存储在多个库上
由于数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的问题。
例如:我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志数据库 logDB 等。

优点:

  • 减少增量数据写入时的锁对查询的影响。
  • 由於单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需检索的行数变少,减少了磁盘IO、时延变短。

缺点:

  • 无法解决单表数据量太大的问题。

1.2 横向切分/水平切分

把原本存储于一个表的数据分块存储到多个表上
当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表上。
例如:我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable:userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。

优点:

  • 单表的并发能力提高了,磁盘的I/O性能也提高了
  • 如果出现高并发的话,总表可以根据不同的查询,将并发压力发到不同的小表里。

缺点:

  • 无法实现表连接查询

2.逻辑库-Schema

MyCat中定义的database是逻辑上存在的,但物理上是不存在的。
主要是针对纵向切分提供的概念

3.逻辑表-Table

MyCat中定义的table,是逻辑上存在,物理上不存在的
主要是针对横向切分提供的概念

4.默认端口

MySql:3306
MyCat:8066
Tomcat:8080
Oracle:1521
nginx:80
http:协议默认端口80
redis:6379

5.数据主机-DataHost

物理MySql存放的主机地址,可以使用主机名,IP,域名定义。

6.数据节点-DataNode

配置物理的database。数据保存的物理节点就是database

7.分片规则

当控制数据的时候,如何访问物理database和table?
就是访问dataHost和dataNode的算法
在Mysql处理CRUD时,如何访问datahost和datanode的算法?如:哈希算法,crc32算法等。

五、MyCat的使用

1.读写分离

原理:需要搭建主从模式,让主数据库(master)处理增(insert)、删(delete)、改(update),而从数据库(slave)处理查(select)操作。
MyCat配合数据库本身的复制功能,可以解决读写分离的问题。

2.主从备份概念

主从备份:就是一种主备模式的数据库应用
主库(master)数据与备库(slave)数据完全一致
实现数据的多重备份,保证数据的安全。
可以在Master[InnoDB]和Slave[MyISAM]中使用不同的数据库引擎,实现读写分离


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章