分库分表
2024-03-20 21:52:11 0 举报
AI智能生成
分库分表技术解析
作者其他创作
大纲/内容
特点
透明性
数据冗余性
可靠性
可用性
改善性能
易于扩展
水平扩展
垂直扩展
自治性
实现原理
目录管理
全局目录
分布式目录
全局与本地混合目录
数据分片
水平切分
垂直切分
混合切分
分布式查询处理
分布式并发控制
加锁并发控制
容易死锁
时间戳控制
发生冲突重启,需要全局的统一时钟
乐观并发控制
适用冲突较少的系统
MyCat
优势
高可用
读写分离
多数据源管理
核心概念
逻辑表(table)
分片表
非分片表
ER表
全局表
分片节点(dataNode)
节点主机(dataHost)
配置方式
基于本地XML
配置文件
schema.xml
1.配置逻辑库逻辑表
2.配置逻辑表所存储的数据节点
3.配置数据节点所对应的物理数据库服务器信息
4.具体参数
table
schema
name:逻辑库名称
sqlMaxLimit:限制返回结果集的行数,-1表示关闭
checkSQLschema:判断是否检查发给MyCAT的SQL是否含库名
table
name:属性定义逻辑表的名词,必须是和物理表的名称一致
primaryKey:逻辑表的主键
dataNode:物理数据节点,逗号分隔
rule定义了逻辑表分片规则,对应rule.xml中的tableRule
dataNode
name:属性定义数据节点的名称,必须唯一
dataHost:属性定义分片所在的物理主机
database:属性定义物理数据库名称
dataHost
name:属性定义主机的名称
maxCon:定义最大连接数
minCon:定义最小连接数
server.xml
1.配置系统相关参数
2.配置用户访问权限
3.配置SQL防火墙及SQL拦截功能
4.dml表示:insert,update,select,delete,0不可以,1可以
5.具体参数
user
benchmark
限制前端整体连接数量
usingDecrypt
开启密码加密
0:不开启
1:开启
system
processors
指定系统可用线程数量
TCP连接相关属性
MySQL连接相关属性
心跳属性
handleDistributedTransactions
useSqlStat
rule.xml
1.配置水平分片的分片规则
2.配置分片规则所对应的分片函数
3.具体参数
Function
name:指定算法名称(唯一)
class:具体分片算法,需要指定具体实现类
property:根据算法的要求指定
tableRule
name:指定分片算法(唯一)
rule
columns:表中用于分片的列名
algorithm:对应function中指定的算法名称
4.分片算法
1.取模分片
2.枚举分片
适用按照省份或者区县来拆分业务数据
3.范围分片
4.范围求模算法
5.固定分片Hash算法
6.按日期(天)分片算法
7.日期范围Hash算法
......
sequence
zk-create.yaml
基于zookeeper
启动
解决了统一配置和管理的问题
解决了Mycat与周边组件协调的问题
管理命令
reload
show
原理
拦截
分析
架构剖析
总体架构
通信协议模块
路由解析模块
结果集处理模块
数据库连接模块
监控管理模块
SQL执行模块
网络I/O架构
IO模型
NIO
特点
轮询访问Selector
当有读或者写到达时处理,没有时继续轮询
子主题
BIO
典型的请求-应答模式
AIO
子主题
子主题
多线程架构
子主题
子主题
子主题
核心技术实现
分布式事务实现
2PC提交协议
事务过程
阶段一:提交事务请求
1.事务询问
2.执行事务
3.各参与者向协调者反馈事务询问的响应
阶段二:执行事务提交
1.发送提交请求
2.事务提交
3.反馈事务提交结果
4.完成事务
5.发起回滚请求
6.事务回滚
7.反馈事务回滚结果
8.中断事务
存在的问题
同步阻塞问题(参与者)
单点故障(协调者)
数据不一致(commit命令之前或者之后发生网络故障)
脑裂(协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机)
3PC提交协议
事务过程
在2PC的基础上加入超时机制
解决问题
2PC的单点故障
减少阻塞
存在的问题
数据不一致
TCC
Try:预留业务资源
Confirm:确认执行业务操作
Cancel:取消执行业务操作
子主题
跨库Join实现
全局表
数据冗余
ER分片
主表和子表分片在一个逻辑库
catlet
ShareJoin
数据汇聚和排序
数据排序
堆排序对多个分片返回有序数据
数据汇聚
子主题
技术实战
搭建读写分离
故障切换
高可用集群搭建
dble
dble对MyCat做的增强
MyCat存在的问题
聚合/排序的支持度非常有限,而且在很多场景下还存在结果不正确、执行异常等问题
针对between A and B语法,hash拆分算法计算出来的范围有误
多值插入时,全局序列生成重复值
sharding-join结果集不正确
.......
子主题
子主题
ShardingSphere
三大产品
Sharding-JDBC
定位
轻量级Java框架
Java的JDBC层提供的额外服务
特点
使用客户端直连数据库
jar包形式提供服务
无需额外部署和依赖
Sharding-Proxy
定位
透明化的数据库代理端
提供封装了数据库二进制协议的服务端版本,对异构语言的支持
Sharding-Sidecar
定位
为Kubernetes的云原生数据库代理
无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh
功能
数据分片
概念
分片键
例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段
分片算法
已提供
精确分片算法
PreciseShardingAlgorithm
处理使用单一键作为分片键的=与IN进行分片的场景
配合StandardShardingStrategy使用
范围分片算法
RangeShardingAlgorithm
处理使用单一键作为分片键的BETWEEN AND、>、<、>=、<=进行分片的场景
配合StandardShardingStrategy使用
复合分片算法
ComplexKeysShardingAlgorithm
处理使用多键作为分片键进行分片的场景,包含多个分片键的逻辑较复杂,需要应用开发者自行处理其中的复杂度
配合ComplexShardingStrategy使用
Hint分片算法
HintShardingAlgorithm
处理使用Hint行分片的场景
配合HintShardingStrategy使用
可自行开发
分片策略
标准分片策略
StandardShardingStrategy
只支持单分片键
提供对SQL语句中的=, >, <, >=, <=, IN和BETWEEN AND的分片操作支持
提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法
PreciseShardingAlgorithm是必选的,用于处理=和IN的分片
复合分片策略
ComplexShardingStrategy
支持多分片键
提供对SQL语句中的=, >, <, >=, <=, IN和BETWEEN AND的分片操作支持
行表达式分片策略
InlineShardingStrategy
只支持单分片键
使用Groovy的表达式,提供对SQL语句中的=和IN的分片操作支持
Hint分片策略
HintShardingStrategy
通过Hint而非SQL解析的方式分片的策略
不分片策略
NoneShardingStrategy
配置
分片规则
数据源配置
真实数据源列表
表配置
逻辑表名称、数据节点与分表规则的配置
数据节点配置
用于配置逻辑表与真实表的映射关系
形式
均匀分布
数据表在每个数据源内呈现均匀分布的态势
自定义分布
数据表呈现有特定规则的分布
分片策略配置
维度
数据源分片策略
DatabaseShardingStrategy
用于配置数据被分配的目标数据源
表分片策略
TableShardingStrategy
用于配置数据被分配的目标表
自增主键生成策略
在客户端生成自增主键替换以数据库原生自增主键的方式,做到分布式主键无重复
内核剖析
执行流程
1.SQL解析
解析引擎
第一代
Druid
第二代
自研的SQL解析引擎
第三代
ANTLR
2.查询优化
3.SQL路由
路由引擎
分片路由
直接路由
需要通过Hint(使用HintAPI直接指定路由至库表)方式分片,并且是只分库不分表的前提下,则可以避免SQL解析和之后的结果归并
标准路由(推荐)
适用范围是不包含关联查询或仅包含绑定表之间关联查询的SQL
子主题
4.SQL改写
5.SQL执行
6.结果归并
读写分离
问题
数据一致性问题
核心功能
提供一主多从的读写分离配置,可独立使用,也可配合分库分表使用
独立使用读写分离支持SQL透传
同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性
基于Hint的强制主库路由
不支持
主库和从库的数据同步
主库和从库的数据同步延迟导致的数据不一致
主库双写或多写
编排治理
配置中心
编排治理
支持的注册中心
SPI
Zookeeper
Nacos
应用性能监控
数据脱敏
分布式事务
核心概念
两阶段事务-XA
SAGA柔性事务
SEATA柔性事务
柔性事务
BASE
基本可用
柔性状态
最终一致性
适用场景
长事务&高并发
SAGA柔性事务
子主题
支持功能
本地事务
两阶段事务-XA
子主题
子主题
子主题
柔性事务-SAGA
柔性事务-SEATA
SPI
SQL解析
数据库协议
数据脱敏
分布式主键
分布式事务
XA事务管理器
注册中心
用户手册
Sharding-JDBC
Sharding-Proxy
链接
实际问题
生产不停机分库分表如何做
项目实践
应用项目
风控
双证书SSL
分库分表策略
按月分库
按天分表
自己实现
子主题
业务限制
按天查询
0 条评论
下一页