美文网首页
跨库分页

跨库分页

作者: saoraozhe3hao | 来源:发表于2018-10-29 09:36 被阅读0次

场景:两个库,以ID为分库键,以time为排序键,每页10条,查询第5页
单库查询:order by time offset 40 limit 10
方案

全局视野法

1、每个库查询50条:order by time offset 0 limit 50
2、内存排序,裁剪
缺点:数据冗余太大

禁止跳页

1、查询第一页
每个库查询10条:order by time where time>0 limit 10
内存排序,裁剪
2、查询下一页
客户端查询时,带上当前页的time_max
每个库查询10条:order by time where time>$time_max limit 10
内存排序,裁剪

允许损失

根据ID在每个库上分布均匀的原理,
1、查询时在每个库上均摊:order by time offset 20 limit 5
2、内存排序

二次查询法

1、在每个库上的第一次查询:order by time offset 20 limit 5
在查询结果中找到最小time_min_all 和 每个库各自的time_max_self
2、在每个库上的第二次查询:by time where time between time_min_all and time_max_self
每个库中比time_min_all小的记录的数量count_less为:20 - (第二次查询结果count - 5)
time_min_all的全局offset为 count_less的和
对第二次查询结果进行排序,裁剪
3、极端情况下,第一次查询结果集合中time_min_all所在的结果的time_max_self 比其他结果的 time_min_self都小,那么得在这个数据库上追加查询

相关文章

网友评论

      本文标题:跨库分页

      本文链接:https://www.haomeiwen.com/subject/bxgvtqtx.html