Mysql(下)

71 阅读3分钟
  • Mysql分库分表
  • 1.用户请求大
  • 单服务器TPS、内存、IO有上限,需要分散请求
  • 2.单库数据量大
  • 单库数据库处理能力有限
  • 3.单表数据量大
  • 单表数据量过大引起SQL变慢
  • 不同的业务场景可以用不同的分库分表key的方案
  • 分库分表的问题:
  • 1.事务问题:一次事务插入两条记录,分布在不同的服务器上,数据保障一致性
  • 2.垮裤join:全局表(字典表)、字段冗余、系统层组装
  • 3.额外的数据运算压力
  • ShardingSphere(Sharding jdbc):张亮
  • Sharding-jdbc和sharding-proxy、sharding-sidecar(规划)组成
  • Sharding-jdbc:
  • 适用于任何基于java的ORM框架,支持各种连接池,各种数据库(关系型)
  • 主要功能:数据分片、分布式事务、数据库治理
  • 1.引入依赖
  • 2.规则配置
  • 3.创建DataSource
  • 分片算法
  • 提供接口,需要自己实现分片算法。
  • 精确分片算法preciseshardingalgorithm
  • 范围分片算法rangshardingalgorithm
  • 复合分片算法complexkeysshardingalgorithm
  • hint分片算法hintshardingalgorithm
  • 分片策略:分别是以上分片算法的封装实现
  • 1.标准分片策略
  • 2.复合分片策略
  • 3.行表达式分片策略
  • 4.hint分片策略
  • SQL规范
  • 1.多数据节点不支持case when/having/union(all)
  • 2.只支持一层子查询
  • 3.子查询中不支持聚合函数
  • 4.不支持包含schemaSQL
  • 5.分片健在表达式中将全路由(效率低)
  • inline表达式
  • ${begin..end}范围
  • ${[unit,unit2..]}枚举值
  • 主键生成策略
  • UUID:效率较低
  • SNOWFLAKE:64bit长整形
  • 自定义主键生成器:实现shardingkeygenerator接口
  • 读写分离支持
  • 1.只支持单主库
  • 2.可以独立使用
  • 3.统一线程保证数据一致性
  • 4.基于hint的强制主库路由
  • 5.不支持主从数据同步
  • 6.主从数据同步延迟
  • 7.主库双写和多写不支持
  • 8.跨主从的事务数据不一致
  • 数据脱敏操作:自动化加解密
  • 分布式事务
  • CAP(强一致性)
  • BASE(最终一致性)
  • 2PC(两阶段提交):1.准备阶段2.提交阶段
  • 有性能问题,容易阻塞,数据一致性问题
  • 3PC(三阶段提交):1.可以提交2.准备提交3.提交
  • 解决单点阻塞问题
  • XA(强一致性)分布式事务规范
  • 实现XA接口,通过事务管理器进行分布式事务管理,MYSQL只是一个参与者
  • TCC(最终一致性)
  • try/confirm/cancel
  • 解决了协调者单点,
  • 引入超时机制,超时补偿
  • 控制一致性
  • 消息队列模式(最终一致性)
  • 1.事务主动方处理本地事务
  • 2.事务主动方写消息,事务被动方处理事务,写消息
  • Saga模式(最终一致性)
  • 是一种补偿模式
  • 1.向前回复,顺序执行,失败重试知道成功
  • 2.向后回复,失败向后补偿
  • Seata框架
  • 有AT/TCC/SAGA,默认AT
  • Mycat
  • 支持垮裤Join
  • 逻辑库、逻辑表
  • 分片表、非分片表
  • ER表、全局表
  • Server.xml:配置mycat的系统配置信息
  • mycat的全局序列生成方式
  • 0:本地文件
  • 1:数据库
  • 2:本地时间戳
  • 3:ZK
  • schema.xml配置
  • 配置逻辑库、表、分片节点
  • rule.xml
  • 分片规则配置