Mycat--理论--05--Mycat跨分片聚合处理机制

Mycat--理论--05--Mycat跨分片聚合处理机制,第1张

Mycat--理论--05--Mycat跨分片聚合处理机制 Mycat–理论–05–Mycat跨分片聚合处理机制 1、原理图

在内存中完成聚合逻辑,所以大量数据的情况下,资源消耗比较严重

2、分页
Select * from a limit 100

2.1、问题

存在随机结果集问题,比如分片1上的50条记录与分片2上的50条,取决于分片数据到来的先后顺序。

3、排序 3.1、算法

采用的是堆排序

3.2、分片表分页排序的复杂度问题 问题

取出从第100万开始的100条记录

Select * from a order by  name  limit 1000000,100

处理

需要改写为如下sql,发给每个分片去执行,然合排序,取出100条记录

Select * from a order by  name  limit  0,1000000+100
后果

如果每个分片都有200万数据,总共10个分片,那么就要处理200*10=2000万数据。导致sql执行非常耗时。

3.3、排序的优化算法1

    保留当前排好序的最大100条记录作为结果集(topNSet),并记录当前结果集之前的记录总数(preCount)

    如果一条记录符合当前结果集,则淘汰当前结果集中的一条记录,并且将preCount++
    如果preCount++等于 100万 ,则处理结束,输出topNSet

    如果只有分页而不排序,则累计preCount,直到100万以后,在保存topNSet条记录输出即可

3.4、分页排序的优化可能性

假设:每个分片都是排序好的有序队列,对于以下sql

Select * from a order by name limit M,N 
优化思路1
    尽可能的放弃分片节点发来的无效数据当满足以下条件时,就可以结束后继数据的处理了
    所有分片都存在一个记录没有进入结果集的情况
优化思路2
    多次向后端发起SQL请求如果分片个数为Q个,则考虑获取M/Q+N条记录做排序
M为100万,总共10个分片,则每个分片获取10万+100条记录,
进入结果集排序,如果按照思路1的优化后,发现结果集数量不足,则继续发起后端请求

优化思路3
每个MySQL节点上Dump数据 ,然后分布式的排序和二进制高效传输
4、分组,统计

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5706646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存