最近研究分布式数据库架构,发现排序、分组及分页让着实人有点头疼。现把问题及解决思路整理如下。

一、 多分片(水平切分)返回结果合并(排序)

1、Select + None Aggregate Function的有序记录合并排序

解决思路:对各分片返回的有序记录,进行排序去重合并。此处主要是编写排序去重合

并算法。

2、Select + None Aggregate Function的无序记录合并

解决思路:对各分片返回的无序记录,进行去重合并。

优点:实现比较简单。

缺点:数据量越大,字段越多,去重处理就会越耗时。

3、Select + Aggregate Function的记录合并(排序)

Oracle常用聚合函数:Count、Max、Min、Avg、Sum。

AF:Max、Min

思路:通过算法对各分片返回结果再求max、min值。

AF:Avg、Sum、Count

思路:分片间无重复记录或字段时,通过算法对各分片返回结果再求avg、sum、count值。分片间有重复记录或字段时,先对各分片记录去重合并,再通过算法求avg、sum、count值。

比如:

select count(*) from user

select count(deptno) from user;

select count(distinct deptno) from user;

二、多分片(水平切分)返回结果分页

解决思路:合并各分片返回结果,逻辑分页。

优点:  实现简单。

缺点:  数据量越大,缓存压力就越大。

分片数据量越大,查询也会越慢。

三、多分片(水平切分)查询有分组语法的合并

1、Group By Having + None Aggregate Function时

Select + None Aggregate Function

比如:select job user group by job;

思路:直接去重(排序)合并。

Select + Aggregate Function

比如:select max(sal),job user group by job;

思路:同Select + Aggregate Function的记录合并(排序)。

2、Group By Having + Aggregate Function时

解决思路:去掉having AF条件查询各分片,然后把数据放到一张表里。再用group by having 聚合函数查询。

四、分布式数据库架构--排序分组分页参考解决方案

解决方案1:Hadoop + Hive。

思路:使用Hadoop HDFS来存储数据,通过Hdoop MapReduce完成数据计算,通过Hive HQL语言使用部分与RDBBS一样的表格查询特性和分布式存储计算特性。

优点: 可以解决问题

具有并发处理能力

可以离线处理

缺点:  实时性不能保证

网络延迟会增加

异常捕获难度增加

Web应用起来比较复杂

解决方案2:总库集中查询。

优点: 可以解决问题

实现简单

缺点: 总库数据不能太大

并发压力大

五、小结

对 于分布式数据库架构来说,排序、分页、分组一直就是一个比较复杂的问题。避免此问题需要好好地设计分库、分表策略。同时根据特定的场景来解决问题。也可以 充分利用海量数据存储(Hadoop-HDFS|Hive|HBse)、搜索引擎(Lucene|Solr)及分布式计算(MapReduce)等技术来 解决问题。 别外,也可以用NoSQL技术替代关系性数据库来解决问题,比如MogonDB\redis。

mysql 分表 去重统计_MySQL分库分表总结相关推荐

  1. mysql pdo 插入没效果_MySQL分库分表后用PHP如何来完美操作

    当单表达到几千万时,查询一次要很久,如果有联合查询,有可能会死在那 分库分表主要就是解决这个问题,减小数据库的负担,缩短查询时间分库 1)按功能分 用户类库.商品类库.订单类库.日志类.统计类库... ...

  2. mysql分片库分页查询_Mysql分库分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  3. mysql分库分表配置命令_mysql分库分表中间件Heisenberg

    "trans_shard"> "trans_online, trans_content, trans_tb "dataNode="transDN ...

  4. mysql数据库分表备份脚本_MySQL分库分表备份脚本

    MySQL分库分表备份脚本 vim /data/mysqlback.sh #! /bin/bash BAKPATH=/data/mysql-back MYUSER=root MYPASS=" ...

  5. mysql数据库分表备份脚本_MySQL分库分表备份数据库脚本的操作

    MySQL分库分表备份数据库脚本的操作 发布时间:2020-05-26 16:52:23 来源:51CTO 阅读:134 作者:三月 本篇文章给大家主要讲的是关于MySQL分库分表备份数据库脚本的操作 ...

  6. mysql左连接去重查询_mysql之单表查询、多表查询

    mysql查询 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[,...,字段n])] values (数据1[,...,数据n])[, ...

  7. mysql数据库分表备份脚本_mysql 分库分表备份脚本

    #!/bin/bash USER=root #用户 PASSWORD=123456 #密码 MYSQL_PATH=127.0.0.1 #地址 MYSQL_BIN=/bin/mysql MYSQL_DU ...

  8. mysql 表与表之间的条件比对_Mysql分库分表面试题(mysql高可用方案解析)

    数据库数据过大的系统架构-mysql分库分表高可用 如果当你的数据量达到千万级,亿级的时候,我们用常规的方式去做优化那么效果可能就不是很好了.这已经不是说性能的问题了,而是数据量响应的处理问题了,所以 ...

  9. sharding分表后主键_分库分表【Sharding-JDBC】入门与项目实战

    最近项目中不少表的数据量越来越大,并且导致了一些数据库的性能问题.因此想借助一些分库分表的中间件,实现自动化分库分表实现.调研下来,发现Sharding-JDBC目前成熟度最高并且应用最广的Java分 ...

最新文章

  1. java 获取已有字体,java获取本机全部可用字体
  2. 计算机专业西电和大工怎么选,放弃985大连理工,选择211西安电子科大,其实很多人都错了...
  3. 上海市国资大数据课题启动仪式暨数据资产技术及金融行业应用沙龙隆重开
  4. 十分钟掌握pyecharts十类顶级图,都很实用!
  5. java ucs2转utf8_Windows下Unicode(UCS2),UTF8,GBK(GB2312)互转
  6. 使用Directory.EnumerateFiles进行批处理
  7. OSG三维渲染引擎编程指南(详读)
  8. python分布式定时任务_分布式定时任务框架——python定时任务框架APScheduler扩展...
  9. 【原创】微信最新表情js代码
  10. 佳博打印机ip地址修改软件_【动手实践】树莓派将有线打印机转为无线共享打印机 by xinlong...
  11. 如何在Excel中创建组合图
  12. java 域账户登录失败_域用户登陆,错误:无法登录到你的账户,通常可以通过从你的账户注销,然后重新登录来解决此问题...
  13. jQuery表单正则校验(邮箱、手机号、身份证)
  14. (83)FPGA减法器设计(多位减法器)
  15. maya Xgen导入UE4中,UE4毛发动力学
  16. keras实现一种带桥接的空洞金字塔池化的unet分割模型
  17. OpenStack Kolla-Ansible部署Trove数据库服务Daas,部署Ceilometer数据收集服务,Gnocchi对接Ceph
  18. 格式工厂怎样压缩视频到指定大小,如何设置参数?
  19. 宾补其实是宾语从句的省略
  20. .NET Framework的作用是什么

热门文章

  1. docker mysql优势_Docker 有什么优势?
  2. 微软打造新手机操作系统:改变手机业游戏规则
  3. Mathtype生成的公式插入word中时缩成一团的解决办法
  4. python文件内容 替换,Python对指定文件内容进行全局替换
  5. day7字典和集合作业
  6. android app定时自动重启,Android app升级完成以后自动重启自身App
  7. 利润的来源:会员权益的前置和后置
  8. 怎样做校园外卖配送系统创业?打造一体化服务校园平台如何进行?
  9. 图像处理-模板、卷积的整理
  10. 除非……否则……在命题公式中的翻译(符号化)