分布式数据库架构--排序、分页、分组、实现

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

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

          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。

时间: 2024-10-22 07:47:32

分布式数据库架构--排序、分页、分组、实现的相关文章

内存数据库的分布式数据库架构

author:skate time:2012/02/16 转载一篇文章: 本文提出了一种通过引入内存数据库层,建立两层多分区分布式数据库架构.此方案用于解决海量高并发系统的数据存储和访问问题,尤其适用于电子商务等数据模型复杂且业务复杂的互联网站. 这些年互联网站发展迅猛,为应对海量数据下的高并发访问,产生了各种分布式架构设计思想,例如Key-Value引擎,数据分区等.而对于电子商务类网站,海量数据问题还有一个重要特点,就是数据结构化及数据之间的关联,淘宝如此,阿里巴巴也是如此,这是与社区.视频

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo

浅谈分布式数据库

基本概念 1) 单库,就是一个库 ? 2) 分片(sharding),分片解决扩展性问题,引入分片,就引入了数据路由和分片键的概念.分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题. ? 3) 分组(group),分组解决可用性问题,分组通常通过主从复制(replication)的方式实现.(各种可用级别方案单独介绍) ? 4) 互联网公司数据库实际软件架构是(大数据量下):又分片,又分组(如下图) 数据分片简介和问题 数据分片是按照某个维度将存放在单一数据库中的数据分散地存放至多

大数据将促进分布式数据库发展及去Oracle

2015-09-13 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 分布式数据库简介 分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库, 通过网络互相连接共同组成一个完整的.全局的逻辑上集中.物理上分布的大型数据库. 分布式并行数据库通过并行使用多个CPU和磁盘来将诸如装载数据.建立索引.执行查询等操作并行化以提升性能的数据库系统.其中最重要的关键

大型电商分布式网站架构设计与实践,Java分布式架构,Java事务分布式高并发-视频教程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.

分布式数据库选型——数据水平拆分方案

概述 水平拆分的概念随着分布式数据库的推广已为大部分人熟知.分库分表.异构索引.小表广播.这些功能几乎是产品功能需求标配.然而有些客户使用分布式数据库后的体验不尽如意.本文尝试从数据的角度总结分布式数据的复制(replication)和分区(partition)技术原理和方案,其中分区也有称为分片(sharding),希望能引起读者一些思考,在分布式数据库选型中能注意这些细节的区别,选择适合业务的数据水平拆分方案. 分布式数据库架构 分布式数据库以集群形式存在,有多个节点.集群架构有共享磁盘架构

跨越数据库发展鸿沟,谈分布式数据库技术趋势

金融行业架构转型需求随着移动化与互联网化的不断发展,我国金融行业的商业模式与技术体系已经逐渐走上了与西方世界完全不同的道路.众所周知,欧美国家的移动化普及率远远不如我国,同时人口基数也有着数量级的不同,这就使得国内外金融行业所面临的业务类型.数据量.并发量都存在巨大的差异,导致对整个IT基础设施的需求截然不同. 在最近的一两年中,国内部分科技领先的银行已经率先对微服务与分布式技术进行了探索,一些新建的互联网金融类业务也已经开始尝试使用微服务架构.分布式技术.DevOps框架进行应用的开发与维护.

巨杉Talk | 拒绝数据碎片化,原生分布式数据库灵活应对数据管理需求

2019年7月19-20日,以"运筹帷幄,数揽未来"为主题的DAMS中国数据智能管理峰会在上海青浦区成功举办.在DAMS峰会上,巨杉数据库为大家带来了题为"云架构下的分布式数据库设计与实践"的主题分享. 微服务下数据库架构的演进 应用开发从传统架构向分布式转型,最先面临改造的自然就是应用程序框架.如今的微服务框架已经非常成熟,其代表性架构往往包括协议处理.服务拼装.原子服务.以及底层持久化四层.业务逻辑从传统的单一中间件被拆解成众多微服务模块,每个微服务模块由完全对

分布式数据库服务器的四层架构

分布式数据库服务器的四层架构: 访问层:接收访问信息并按负荷智能的分配给中转服务器,接受数据结果并返回客户端. 中转层:接收访问服务器发来的数据访问指令,从总储存服务器寻找数据分布所在的储存服务器,发送指令. 表头层:储存数据的表头信息,以确定储存服务器位置. 处理层:分布式数据储存服务器,接收指令并执行,然后返回数据给访问服务器. 功能分布: 访问服务器只做四件事:接收客户端的访问数据,接收中转服务器的负荷状态信息,并且把数据分配给负荷最低 的中转服务器,接收结果后返回客户端. 中转服务器只做