书籍资料
下载地址看最后面
是什么
分库分表数据拆分有两种方式:垂直切分和水平切分
具体:垂直分库、水平分库、垂直分表、水平分表
垂直切分
垂直分表:
- 把不常用的字段单独放在一张表;
- 把text,blob等大字段拆分出来放在附表中;
- 经常组合查询的列放在一张表中;
垂直分库 :
- 专库专用
水平切分
- 哈希切分
- 时间切分
- 范围切分
分库分表带来的问题
1、事务一致性问题
2、跨节点关联查询 不支持
2、跨节点分页、排序,聚合
需要先在不同的分片节点中将数据 进行排序/聚合并返回,然后将不同分片返回的结果集进行汇总和再次排序/聚合。
如果是取第 N页,需要将所有节点前N页数据都取出来合并,再进行整体的排序 ,ShardingSphere 在两个方面进行了优化 ,流式处理+合并排序,避免过多的内存占用.
4、主键避重
5、公共表
Shardingjdbc
基础概念
逻辑表,真实表,数据节点,绑定表,广播表,分片键,分片算法,分片策略,主键生成
执行流程
SQL解析 => 查询优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并 (流式归并、内存归并和装饰者归并)
读写分离
Sharding-JDBC读写分离则是根据SQL语义的分析,将写操作和读操作分别路由至主库与从库
副本实时性
1、根据业务敏感度决定是否采用读写分离
2、同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。
小总结:
一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表方案,在数据量及访问压力不是特 别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库水平分表 方案。
分布式事务
扩容
(1)停机迁移方案
(2)双写迁移方案
简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,都除了对老库增删改,都加上对新库的增删改,这就是所谓双写,同时写俩库,老库和新库。
分布式事务
这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。
分布式事务产生的场景
- 跨JVM进程产生分布式事务
- 单体系统访问多个数据库实例
理论:
分布式事务解决方案
有2PC、 TCC、可靠消息最终一致性、最大努力通知
1. 2pc
缺点:
2、3pc
2PC与3pc不同点
在cancommit precommit 阶段 协调者超时,或者参与者超时之后,仍未收到协调者的请求会中断事务
3、Seata AT模式,是2pc的优化
4、Tcc
TCC需要注意三种异常处理分别是空回滚、幂等、悬挂:
空回滚:
在没有调用 TCC 资源 Try 方法的情况下,调用了二阶段的 Cancel 方法,Cancel 方法需要识别出这是一个空回滚,然后直接返回成功。
幂等:
通过前面介绍已经了解到,为了保证TCC二阶段提交重试机制不会引发数据不一致,要求 TCC 的二阶段 Try、 Confifirm 和 Cancel 接口保证幂等,这样不会重复使用或者释放资源。
悬挂:
悬挂就是对于一个分布式事务,其二阶段 Cancel 接口比 Try 接口先执行。
4、可靠消息最终一致性
存在问题:
1.本地事务与消息发送的原子性问题
2、事务参与方接收消息的可靠性
3、消息重复消费的问题
解决方案
- 本地消息表方案
- RocketMQ事务消息方案
可靠消息最终一致性事务适合执行周期长且实时性要求不高的场景。引入消息机制后,同步的事务操作变为基于消息执行的异步操作, 避免了分布式事务中的同步阻塞操作的影响,并实现了两个服务的解耦。
5、最大努力通知
发起通知方通过一定的机制最大努力将业务处理结果通知到接收方。
具体包括:
1、有一定的消息重复通知机制。
2、消息校对机制。
- 方案一
- 方案二
分布式事务对比分析
g-blog.csdnimg.cn/ed81c66fba3947d18a913594b5641a91.png)
下载地址
https://download.csdn.net/download/weixin_41276656/87348460