加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 安全 > 正文

分布式数据库和Hadoop都不够好,于是我们设计分布式SQL计算系统

发布时间:2021-01-19 15:14:36 所属栏目:安全 来源:网络整理
导读:副标题#e# 《分布式数据库和Hadoop都不够好,于是我们设计分布式SQL计算系统》要点: 本文介绍了分布式数据库和Hadoop都不够好,于是我们设计分布式SQL计算系统,希望对您有用。如果有疑问,可以联系我们。 设计思想 为了解决分布式数据库下,复杂的 SQL(如

举例说下如下的几种策略:

列表:以登录省份作为均衡字段为例

取模 hash:按 4 取模,以用户 id 作为均衡字段

范围: 从 0 到一亿,以用户 id 作为均衡字段

取模 hash 和范围结合:先范围,再取模,以用户 id 作为均衡字段

查询

举例说明查询操作,基本信息如下:

用户表 tab_user_info 如下:

用户登录表 tab_login_info 的结构如下:

排序

排序的关键点是节点之间存在大小关系,大的 key 或者 key 范围放到节点 id 大的节点上,然后在节点上排序,获取数据的时候根据节点 id 大小依次获取.

以如下 sql 为例,某一注册时间范围内的用户信息,按照年龄和 id 排序:

select * from tab_user_info t where u_reg_dt>=? and u_reg_dt<=? order by u_id

执行计划可能为:

Map:

select * from tab_user_info t where u_reg_dt>=? and u_reg_dt<=? order by u_id

Shuffle:

执行完成之后,这种情况下由于需要按照 u_id 进行数据洗牌,所以各个存储节点上需要按照 u_id 进行划分.例如有 N 个计算节点,那么按照(最大 u_id- 最小 u_id)/N 平均划分,将不同存储节点上的同一范围的 u_id,划分到同一个计算节点上即可(这里的计算节点存在大小关系).

Reduce:

select * from tab_user_info t order by u_id

分组聚合

关键点和排序类似,节点之间存在大小关系,然后在节点上分组聚合,某一注册时间范围内的用户,按照年龄分组,计算每个分组内的用户数:

select age,count(u_id) v from tab_user_info t where u_reg_dt>=? and u_reg_dt<=? group by age

执行计划可能为:

Map:

select age,count(u_id) v from tab_user_info t where u_reg_dt>=? and u_reg_dt<=? group by age

Shuffle:

执行完成之后,这种情况下由于需要按照 age 进行数据洗牌,考虑到 age 的唯一值比较少,所以数据洗牌可以将所有的记录拷贝到同一个计算节点上.

Reduce:

select age,sum(v) from t where group by age

连接 ?

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读