分库分表优化:换中间件 二次查询

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

第一次查询的时候ORDER BY ID LIMIT 10 OFFSET 0,那么下一页就可以改为WHERE id > max_id ORDER BY ID LIMIT 10 OFFSET 0。在现在的手机 App 里这个策略是非常好用的,因为手机 App 都是下拉刷新,天然就不存在跨页的问题。

第一部分提到了极值,面试官可能问你什么时候用最大值,什么时候用最小值,可以这样说:

至于用最大值还是最小值,取决于order by。总的原则就是升序用最大值,降序用最小值。如果order by里面包含了多个列,那么针对每一个列是升序还是降序,来确定使用最大值还是最小值。

这种方案并没有彻底解决分库分表查询中的分页问题,但是控制了偏移量,极大的减少了网络通信的消耗和磁盘扫描的消耗。

一种思路是使用NoSQL之类的来存储数据,比如使用Elasticsearch、ClickHouse;另一种思路是使用分布式关系型数据库,相当于把分页的难题抛给了数据库

先尝试获取某个数据的全局偏移量,再根据这个偏移量来计算剩下数据的偏移量。这里用一个例子来阐述它的基本原理,再抽象出一般步骤。
假设我们的查询是

SELECT * FROM order_tab ORDER BY id LIMIT 4 OFFSET 4

数据分布如图所示:

全局的LIMIT 4 OFFSET 4 是 5、6、7、8 四条数据

首次查询
把SQL语句改写成这样:

SELECT * FROM order_tab_0 ORDER BY id LIMIT 4 OFFSET 2
SELECT * FROM order_tab_1 ORDER BY id LIMIT 4 OFFSET 2

我们只是把OFFSET平均分配了,但是LIMIT没变
第一次查询到的数据是这样
order_tab_0 拿到了 4、6、10、12,而 order_tab_1 拿到了 7、8、9、11
确认最小值
id最小的是4,来自order_tab_0

目录
相关文章
|
4月前
|
算法 中间件 Java
分库分表的一般做法 中间件的形态
【7月更文挑战第14天】
113 0
|
6月前
|
存储 监控 安全
中间件应用优化持久化配置
【5月更文挑战第4天】中间件应用优化持久化配置
77 2
中间件应用优化持久化配置
|
6月前
|
缓存 监控 NoSQL
中间件应用性能优化
【5月更文挑战第2天】中间件应用性能优化
126 2
中间件应用性能优化
|
6月前
|
消息中间件 缓存 NoSQL
[中间件] 秒杀系统秒杀率提高300%?教你如何利用redis和rabbitmq 优化应用!
[中间件] 秒杀系统秒杀率提高300%?教你如何利用redis和rabbitmq 优化应用!
262 0
|
关系型数据库 MySQL 中间件
MySQL实现分库分表代码实战(Mango中间件)
MySQL实现分库分表代码实战(Mango中间件)
208 1
|
SQL cobar 算法
分库分表中间件介绍
分库分表中间件介绍
|
开发框架 前端开发 JavaScript
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(一)
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示
352 4
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(一)
|
SQL 开发框架 前端开发
java程序设计与j2ee中间件技术/软件开发技术(III)-实验六-采用MVC模式实现用户注册和管理员查询功能
java程序设计与j2ee中间件技术/软件开发技术(III)-实验六-采用MVC模式实现用户注册和管理员查询功能
128 2
java程序设计与j2ee中间件技术/软件开发技术(III)-实验六-采用MVC模式实现用户注册和管理员查询功能
|
消息中间件 SQL 移动开发
waynboot商城发布啦,整合了Redis、RabbitMQ、ElasticSearch等常用中间件, 根据生产环境开发经验而来不断完善、优化、改进中
waynboot商城发布啦,整合了Redis、RabbitMQ、ElasticSearch等常用中间件, 根据生产环境开发经验而来不断完善、优化、改进中
279 0
|
关系型数据库 MySQL 中间件
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
134 0