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