MyCat教程二:mysql主从复制实现
MyCat教程三:安装及配置介绍
MyCat教程四:实现读写分离
MyCat教程五:实现分库分表
MyCat教程六:全局序列号-全局主键的自增加前端
MyCat 是目前最流行的基于 java
语言编写的数据库中间件
,是一个实现了 MySQL 协议的服务器,前端用户能够把它看做是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端能够用 MySQL 原生协议与多个 MySQL 服务器通讯,也能够用 JDBC 协议与大多数主流数据库服务器通讯,其核心功能是分库分表
。配合数据库的主从模式还可实现读写分离
。
MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得 MyCat 变得很是的强大。
MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端能够支持MySQL、SQL Server、Oracle、DB二、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型NoSQL 方式的存储,将来还会支持更多类型的存储。而在最终用户看来,不管是那种存储方式,在 MyCat 里,都是一个传统的数据库表,支持标准的 SQL 语句进行数据的操做,这样一来,对前端业务系统来讲,能够大幅下降开发难度,提高开发速度。
MyCat 官网: www.mycat.io/java
单一的 MySQL 其数据存储量级和操做量级有限.
Mycat 能够管理若干 MySQL 数据库,同时实现数据的存储和操做.mysql
MyCat 在互联网应用中占比很是高.nginx
逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分.程序员
就是把本来存储于一个库的数据存储到多个库上。
因为对数据库的读写都是对同一个库进行操做,因此单库并不能解决大规模并发写入的问题。例如,咱们会创建定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志数据库 logDB 等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。redis
优势算法
缺点:没法解决单表数据量太大的问题。sql
把本来存储于一个表的数据分块存储到多个表上。
当一个表中的数据量过大时,咱们能够把该表的数据按照某种规则,进行划分,而后存储到多个结构相同的表,和不一样的库上。例如,咱们 userDB 中的 userTable 中数据量很大,那么能够把 userDB 切分为结构相同的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为不少userTable:userTable0、userTable1 等,而后将这些表按照必定的规则存储到多个 userDB 上。数据库
优势后端
缺点:没法实现表链接查询。
Mycat 中定义的 database.是逻辑上存在的.可是物理上是不存在的.主要是针对纵向切分提供的概念.
Mycat 中定义的 table.是逻辑上存在,物理上是不存在的.主要是针对横向切分提供的概念.
应用 | 端口 |
---|---|
MySQL | 3306 |
Mycat | 8066 |
tomcat | 8080 |
Oracle | 1521 |
nginx | 80 |
http | 80 |
redis | 6379 |
物理 MySQL 存放的主机地址.可使用主机名,IP,域名定义.
配置物理的 database. 数据保存的物理节点.就是 database.
当控制数据的时候,如何访问物理 database 和 table.就是访问 dataHost 和 dataNode 的算法. 在 Mycat 处理具体的数据 CRUD 的时候,如何访问 dataHost 和 dataNode 的算法.如:哈希算法,crc32 算法等.