分库分表介绍
随着微服务这种架构的兴起, 我们应用从一个完整的大的应用, 切分为很多可以独立提供服务的小应用. 每个应用都有独立的数据库.
数据的切分分为两种:
垂直切分: 按照业务模块进行切分, 将不同模块的表切分到不同的数据库中.
水平切分: 将一张大表按照一定的切分规则, 按照行切分到不同的表或者不同的库中.
MyCAT 介绍
官方网站: http://www.mycat.org.cn/
什么是 MyCAT?
简单的说, MyCAT 就是:
一个彻底开源的, 面向企业应用开发的 "大数据库集群"
支持事务, ACID, 可以替代 MySQL 的加强版数据库
一个可以视为 "Mysql" 集群的企业级数据库, 用来替代昂贵的 Oracle 集群
一个融合内存缓存技术, Nosql 技术, HDFS 大数据的新型 SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
MyCAT 的目标是: 低成本的将现有的单机数据库和应用平滑迁移到 "云" 端, 解决数据存储和业务规模迅速增长情况下的数据瓶颈问题.
MyCAT 的关键特性
支持 SQL 92 标准
支持 MySQL 集群, 可以作为 Proxy 使用
支持 JDBC 连接 ORACLE,DB2,SQL Server, 将其模拟为 MySQL Server 使用
支持 galera for MySQL 集群, percona-cluster 或者 mariadb cluster, 提供高可用性数据分片集群
自动故障切换, 高可用性
支持读写分离, 支持 MySQL 双主多从, 以及一主多从的模式
支持全局表, 数据自动分片到多个节点, 用于高效表关联查询
支持独有的基于 E-R 关系的分片策略, 实现了高效的表关联查询
多平台支持, 部署和实施简单
MyCAT 架构
MyCAT 核心概念
Schema: 由它指定逻辑数据库
Table: 逻辑表
DataNode: 真正存储节点
DataHost: 真正的数据库主机
Mycat 存在的问题
跨库 join 问题
通过业务分析, 将不同库的 join 查询拆分成多个 select
建立全局表 (每个库都有一个相同的表)
冗余字段 (不符合数据库三范式)
E-R 分片 (将有关系的记录都存储到一个库中)
最多支持跨两张表跨库的 join
分布式事务 (弱事务)
强一致性事务 (同步)
最终一致性事务 (异步思想)
分布式主键
Redis incr 命令
数据库 (生成主键)
UUID
snowflake 算法
1.1 分片策略
MyCAT 支持水平分片与垂直分片:
水平分片: 一个表格的数据分割到多个节点上, 按照行分隔.
垂直分片: 一个数据库中多个表格 A,B,C,A 存储到节点 1 上, B 存储到节点 2 上, C 存储到节点 3 上.
MyCAT 通过定义表的分片规则来实现分片, 每个表格可以捆绑一个分片规则, 每个分片规则指定一个分片字段并绑定一个函数, 来实现动态分片算法.
Schema: 逻辑库, 与 MySQL 中的 Database(数据库) 对应, 一个逻辑库中定义了所包括的 Table.
Table: 表, 即物理数据库中存储的某一张表, 与传统数据库不同, 这里的表格需要声明其所存储的逻辑数据节点 DataNode. 在此可以指定表的分片规则.
DataNode:MyCAT 的逻辑数据节点, 是存放 table 的具体物理节点, 也称之为分片节点, 通过 DataSource 来关联到后端某个具体数据库上
DataSource: 定义某个物理库的访问地址, 用于捆绑到 Datanode 上
Mycat 读写分离
MyCat 的读写分离是建立在 MySQL 主从复制基础之上实现的.
数据库读写分离对于大型系统或者访问量很高的互联网应用来说, 是必不可少的一个重要功能. 对于 MySQL 来说, 标准的读写分离是主从模式, 一个写节点 Master 后面跟着多个读节点, 读节点的数量取决于系统的压力, 通常是 1-3 个读节点的配置
Mycat 读写分离和自动切换机制, 需要 MySQL 的主从复制机制配合.
来源: https://www.cnblogs.com/dzlj/p/12163448.html