注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

linux 学习

 
 
 

日志

 
 

【转】分布式数据库架构--排序分页分组探讨  

2015-03-24 21:16:28|  分类: 应用编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

分布式数据库架构--排序分页分组探讨

          最近对分布式数据库架构产生了兴趣,发现排序、分组及分页让人有点头疼。现把问题及解决思路整理如下,希望有兴趣的朋友能指出问题或是给出好的解决方法。当然,如果有经过实践的好方案,也希望能共享一二。

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

          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 emp;

          select count(deptno) from emp;

          select count(distinct deptno) from emp;

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

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

        优点:  实现简单。

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

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

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

         1、Group By Having + None Aggregate Function时

         Select + None Aggregate Function

         比如:select job emp group by job;

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

        Select + Aggregate Function

         比如:select max(sal),job emp 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。

  评论这张
 
阅读(520)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017