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

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

    在这里插入图片描述

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

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

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

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

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

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

4、分组,统计

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值