分库分表优化:引入中间表

简介: 【7月更文挑战第12天】

抽象版本:
假设分库分表共有n个表,查询是LIMIT X OFFSET Y,那么:

  1. 首先发送查询语句 LIMIT X OFFSET Y/N 到所有的表
  2. 找到返回结果中的最小值(升序),记作min
  3. 执行第二次查询,关键是BETWEEN min AND max,其中max是第一次查询的数据中每个表各自的最大值
  4. 根据min、第一次查询和第二次查询的值来确定min的全局偏移量。总的来说,min在某个表里的偏移量这样计算:如果第二次查询比第一次查询多了K条数据,偏移量就是Y/N-K。然后把所有表的偏移量加在一起,就是min的全局偏移量
  5. 根据min的全局偏移量,在第二次查询的结果里面向后补足到Y,得到第一条数据的位置,再取X条。

引入中间表
引入中间表的意思是额外存储一份数据,只用来排序。这个方案里面就是在中间表里加上排序相关的列

排序是一个非常常见的需求,那么就可以考虑引入一个中间表来辅助排序。比如说用更新时间来排序的时候,在中间表里加上更新时间。查询的时候先在中间表里查到目标数据,再去目标表里把全部数据都查询出来。
有两个明显的缺陷:一是WHERE只能使用中间表上的列;二是维护中间表也会引起数据一致性问题。

那么如何解决数据一致性问题呢?

比较简单的做法就是业务保持双写,也就是写入目标表也写入中间表。不过这里我更加建议使用 Canal 之类的框架来监听 binlog,异步更新中间表。这样做的好处是业务完全没有感知,没有什么改造成本。更新的时候可以考虑引入重试机制,进一步降低失败的几率。

面试官可能进一步问你,如果更新中间表经过重试之后也失败了,怎么办?
这时候并没有更好的办法,无非就是引入告警,然后人工介入处理。最后你可以再总结一下这个方案。

这个方案是一个依赖最终一致性的方案,在强调强一致性的场景下并不是很合适。

目录
相关文章
|
关系型数据库 MySQL 索引
【MySQL 解析】Hash索引和B+树索引对比分析
【1月更文挑战第11天】【MySQL 解析】Hash索引和B+树索引对比分析
|
编解码 人工智能 缓存
通义万相重磅升级,成功登顶VBench,阿里云百炼邀您第一时间体验
阿里云通义万相推出2.1视频生成模型,大幅提升复杂运动、物理规律遵循及艺术表现,在权威评测VBench中夺冠。新模型采用自研VAE和DiT架构,增强时空上下文建模,实现更稳定的大幅度肢体运动和多对象生成。通义万相支持中英文文字特效生成,满足广告设计、短视频等创作需求,并在阿里云百炼平台开放API调用,提供免费试用资源。
1305 0
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,阿里云百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。
4623 0
|
SQL 运维 大数据
轻量级的大数据处理技术
现代大数据应用架构中,数据中心作为核心,连接数据源与应用,承担着数据处理与服务的重要角色。然而,随着数据量的激增,数据中心面临运维复杂、体系封闭及应用间耦合性高等挑战。为缓解这些问题,一种轻量级的解决方案——esProc SPL应运而生。esProc SPL通过集成性、开放性、高性能、数据路由和敏捷性等特性,有效解决了现有架构的不足,实现了灵活高效的数据处理,特别适用于应用端的前置计算,降低了整体成本和复杂度。
|
消息中间件 RocketMQ
RocketMQ - 消费者Rebalance机制
RocketMQ - 消费者Rebalance机制
424 0
|
Java Maven 开发者
"揭秘IDEA的神奇助手:Maven Helper插件,让你轻松驾驭复杂依赖,告别冲突噩梦!"
【8月更文挑战第20天】Maven Helper是一款提升Java开发者工作效率的IDEA插件,它能直观展示项目依赖关系并协助管理。主要功能包括依赖树视图、冲突检测与解决及依赖排除。安装简便,重启IDEA后即用。借助其“Dependencies”面板,开发者可以清晰了解依赖详情,快速定位并解决冲突问题,有效优化项目结构,提升开发效率。
1471 0
layui 请求返回401token 过期 重新登陆
layui 请求返回401token 过期 重新登陆
310 0
|
XML Java 数据格式
一篇文章了解Java spring中bean的生命周期!
一篇文章了解Java spring中bean的生命周期!
486 0
|
存储 算法 搜索推荐
ElasticSearch 之 _score
ElasticSearch 之 _score
1160 0
|
UED
《云上业务稳定性保障实践白皮书》——三.故障管理体系——3.故障管理全流程——3.1 故障等级定义
《云上业务稳定性保障实践白皮书》——三.故障管理体系——3.故障管理全流程——3.1 故障等级定义
2353 0