资讯专栏INFORMATION COLUMN

分布式 - 跨库分页

Barry_Ng / 1880人阅读

摘要:缺点每个分库需要返回更多的数据,占用网络带宽需要服务层的计算这个算法随着页码的增大即的增大,性能平方级下降。缺点禁止跳页查询。假设所有分库总共多出条数据,则全局。

 select * from T order by time offset X limit Y 的跨M个库分页。
全局

每个库都必须返回 X+Y 个数据,所得到的 M*(X+Y) 在服务层进行内存排序,然后再取总的偏移量X后的Y条记录。

优点: 精准返回所需数据。

缺点: (1)每个分库需要返回更多的数据,占用网络带宽;(2)需要服务层的计算;(3)这个算法随着页码的增大(即X的增大),性能平方级下降。

禁止跳页查询(业务折衷)

获取第一页的方式和全局策略是一样的,但获取第N页(N>1)时,我们取 N-1 页的最大time,即time_max, 对于每个分库执行 select * from T order by time where time > time_max limit Y,这样在服务层再总排序取前Y条记录。

优点: 相比全局策略的性能平方级下降,该策略的性能是恒定的。

缺点: 禁止跳页查询。

[推荐] 二次查询

数学原理:对于一个有序序列分成 M 个长度不等的有序子序列,M个有序子序列中每个有序子序列前X个元素中的最大值集中起来,再取其中最小值,则该最小值一定小于等于原来有序序列的第 M*X 个元素值。
假设该最小值大于原序列的第 MX 个元素值,那么M个有序子序列后面第X+个元素值都大于原序列的第 MX 个元素值,即构成原序列前MX 个元素只能是M个有序子序列的前X-个元素,因为MX- < M*X,所以假设不成立。

步骤:

改写分库sql为: select * from T order by time offset ceil(X/M) limit Y

获取所有分库sql中返回的最小time中的最小time,即time_min(详见上面原理)

改写分库sql为:select * from T order by time between time_min and 各自分库的最大time(从第1步中得到)

第3步的各个分库的返回结果比第一步多,当然time_min的那个分库的返回结果肯定不变(所以time_min的那个分库的sql在实现时可以不用执行)。假设所有分库总共多出 K 条数据,则全局_offset = ceil(X/M) * M - K 。(详见上面原理)

将第3步返回的结果集合并,即第一条数据就是time_min的那条,其_offset由第四步已经得到;我们直接在该结果集的中从第(原始sql的offset - _offset + 2)条数据开始获取Y条数据。

优点: 该策略的性能是几乎恒定。

缺点: 两次查询;内存中要将结果集合并。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47542.html

相关文章

  • 布式 - 跨库分页

    摘要:缺点每个分库需要返回更多的数据,占用网络带宽需要服务层的计算这个算法随着页码的增大即的增大,性能平方级下降。缺点禁止跳页查询。假设所有分库总共多出条数据,则全局。 select * from T order by time offset X limit Y 的跨M个库分页。 全局 每个库都必须返回 X+Y 个数据,所得到的 M*(X+Y) 在服务层进行内存排序,然后再取总的偏移量X...

    littlelightss 评论0 收藏0
  • 干货:布式系统学习笔记

    摘要:即服务不能无响应,或出错分区的容忍性,这里的分区不是指数据分布式存储中的分区。假设一个分布式系统中,有两个节点,处于分区状态。在大多数的分布式系统设计中,人们多会选择满足两点特性。为了解决最终的一致性,这就涉及到分布式事务。 showImg(https://segmentfault.com/img/bV7kd4?w=500&h=253); 一、分布式的两大场景 数据存储的分布式 服务的...

    刘德刚 评论0 收藏0
  • 干货:布式系统学习笔记

    摘要:即服务不能无响应,或出错分区的容忍性,这里的分区不是指数据分布式存储中的分区。假设一个分布式系统中,有两个节点,处于分区状态。在大多数的分布式系统设计中,人们多会选择满足两点特性。为了解决最终的一致性,这就涉及到分布式事务。 showImg(https://segmentfault.com/img/bV7kd4?w=500&h=253); 一、分布式的两大场景 数据存储的分布式 服务的...

    EsgynChina 评论0 收藏0
  • springboot+mycat 分表分库

    摘要:而在分布式系统中,分表分库也是常用的一种解决此类瓶颈的手段。支持数据的多片自动路由与聚合,支持等常用的聚合函数支持跨库分页。支持通过全局表,关系的分片策略,实现了高效的多表查询。支持多租户方案。 前言 对于业务量越来越大的时候,单表数据超过几千万,甚至上亿时,一张表里面查询真的会很费时。而在分布式系统中,分表分库也是常用的一种解决此类瓶颈的手段。今天就选用springboot+myca...

    lakeside 评论0 收藏0
  • “分库分表" ?选型和流程要慎重,否则会失控

    摘要:但你是否知道分库分表需要哪些要素拆分过程是复杂的,提前计划,不要等真正开工,各种意外的工作接踵而至,以至失控。在实施分库分表策略时,这些个性会造成策略过大不好维护。 更多文章关注微信公众号《小姐姐味道》 https://mp.weixin.qq.com/s?__... 数据库中间件之分库分表 恭喜你,贵公司终于成长到一定规模,需要考虑高可用,甚至分库分表了。但你是否知道分库分表需要哪...

    archieyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<