Mycat入门学习
1.学习目标2.MyCat简介2.1 什么是MyCatMyCat是目前最流行的基于java语言编写的数据库中间件,是一个实现了MySQL协议的服务器,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据服务器通信,其核心功能是分库分表,配合数据库的主从模式还可以实现读写分离。MyC
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语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅度降低难度,提升开发速度
MyCat官网: http://www.mycat.io/
2.2 使用Mycat后的结构图
2.3 使用Mycat的优势
2.3.1 数据量级
单一的MySQL其数据存储量级和操作量级有限
Mycat可以管理若干MySQL数据库,同时实现数据库的存储和操作
2.3.2 开源性质
Mycat是java编写的中间件,开源,免费。
有非常多的人和组织对Mycat实行开发,维护,管理,更新
mycat版本提升较快,可以跟随环境发展,如果有问题,可以快速解决
mycat有开源网站和开源社区,且有官方发布的电子书籍
mycat是阿里原应用corba 转型而来的
2.3.3 市场应用
mycat在互联网应用中占比非常高
3. Mycat中的概念
3.1 切分
逻辑上的切分,在物理层面,是使用多库[database],多表[table]实现的切分
3.1.1 纵向切分 / 垂直切分
就是把原本存储于一个库的数据存储到多个库上。
由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入问题
例如:我们会建立定义数据库workDB 商品数据库payDB 用户数据库userDB 日志数据库logDB 等,分别用于存储项目数据定义表,商品定义表,用户数据库表,日志数据表。
优点:
- 减少增量数据库写入时的锁对查询的影响
- 由于单表数据下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需要的检索行数变少,减少了磁盘IO 时延变短。
缺点:
- 无法解决单表数据量太大的问题
3.1.2 横向切分
把原本存储于一个表的数据分块存储到多个表上,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表,和不同的库上,例如:我们userDB中的userTable中数据量很大,我们可以把userDB切分为结构相同的多个userDB part0DB part1DB等,再将userDB上的userTabel 切分为很多userTabel userTabel0 userTable1等,然后将这些表按照一定的规则存储多个userDB上。
优点:
- 单表的并发能力提高了,磁盘 i/o性能也提高了
- 如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面
缺点:
- 无法实现表连接查询
3.2 逻辑库 Schema
Mycat中定义的database 是逻辑上存在的,但是物理上是不存在的
主要是针对纵向切分提供的概念
3.3 逻辑表 -table
Mycat中定义的table是逻辑上存在,物理上是不存在的,
主要是针对横向切分提供的概念
3.4 默认端口
MySQL 默认端口是3306
Mycat默认端口是8066
tomcat默认端口是8080
Oracle 默认端口是1521
nginx默认端口是80
http协议默认端口是80
redis默认端口是6379
3.5 数据主机-dataHost
物理MySQL存放的主机地址,可以使用主机名,ip, 域名定义
3.6 数据节点
配置物理的database 数据保存的物理节点,就是database
3.7 分片规则
当控制数据的时候,如何访问物理database和table 就是访问dataHost和dataNode的算法。在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法,如哈希算法,crc32算法等。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)