《Windows Azure Platform 系列文章目录

  

  在上一篇文章中,笔者介绍了MPP架构的基本内容

  在本章中,笔者给大家介绍一下Azure SQL Data Warehouse数据仓库(SQL DW)的架构。

 

  1.SQL DW分为Head Node和Work Node,下图用Control Node和Compute Node表示

  

  SQL DW是用多个Work Node横向扩展的方式,来支持PB级别的大量关系型数据。

  应用程序将T-SQL命令发送给Head Node。Head Node使用MPP引擎,该引擎优化并行处理的查询,然后将查询发送给Work Node进行并行查询

  Work Node将需要处理的数据保存到Azure Storage中,并进行并行查询

  数据移动服务(DMS)是SQL DW的内部服务,可根据需要跨节点移动数据,以并行运行查询并返回准确的结果

  2.SQL DW是计算和存储分离

  用户的数据是保存在Azure Storage 中的,并不保存在Work Node的本地磁盘上。

  SQL DW实现了Work Node和用户数据的逻辑依赖关系,数据并不移动

  也就是说,当用户的Work Node从6台,横向扩展到10台后,SQL DW重新设置了10个Work Node到Azure Storage的逻辑关系

  3.Azure Storage

  SQL DW底层使用的是Azure Premium Storage,也就是SSD 固态硬盘存储。

  同时用户也可以设置数据库表在SSD存储上的分布模式。SQL DW支持的数据表的分布模式有:

  (1)轮询 Round Robin

  (2)哈希 Hash

  (3)复制 Replication

  4.Head Node

  Head Node是SQL DW的大脑。Head Node在最前端,处理应用程序的交互和链接。

  在Head Node上的MPP引擎,优化和协调并行查询。

  当用户提交了一个T-SQL查询,Head Node会将该查询转换,在所有的Work Node上并行查询

  5.Work Node

  Work Node是真正进行计算的节点。Work Node节点的数量范围是1-60.

  每个Work Node都有一个在系统视图中可见的Node ID。我们可以可以通过查找名称以sys.pdw_nodes开头的系统视图中的node_id列来查看Compute节点ID

  

  6.数据分区模式

  分区是在分布式数据上运行的并行查询的基本存储和处理单元。

  当SQL DW进行查询的时候,任务被分为60个并行执行的子查询。每个子查询都在1个数据分布上运行。

  默认情况下,用户的数据被分为60份 (60个分区)。

  当Work Node节点数量为1的时候,1个Work Node处理60个分区数据。

  当Work Node节点数量为2的时候,2个Work Node处理60个分区数据,每个Work Node处理30个分区数据

  当Work Node节点数量为3的时候,3个Work Node处理60个分区数据,每个Work Node处理20个分区数据

  ......

  当Work Node节点数量为60的时候,60个Work Node处理60个分区数据,每个Work Node处理1个分区数据,这样并行度最高

  举个例子,假设我们只有1个数据库,这个数据库只有1张表,这张表有6000万行数据

  当Work Node节点数量为1的时候,1个Work Node处理6000万行数据,这样并行度最低

  当Work Node节点数量为2的时候,2个Work Node处理6000万行数据,每个Work Node处理3000万行数据

  当Work Node节点数量为3的时候,3个Work Node处理6000万行数据,每个Work Node处理2000万行数据

  ......

  当Work Node节点数量为60的时候,60个Work Node处理6000万行数据,每个Work Node处理100万行数据,这样并行度最高

  观察可以发现,设置SQL DW 分区模式是非常重要的

  我们在上面介绍了,SQL DW支持的数据表的分区模式有三种:轮询 Round Robin,哈希 Hash,复制 Replication

  

  7.轮训 Round Robin

  轮询表是最简单的分布模式,一般用于临时表

  轮询表中的数据是平均分布的,不进行任何优化。在使用轮训表的时候,SQL DW随机选择一个分布键,然后将数据随机的写入轮询表

  与哈希分布表不同的是,值相等的行不一定分配到相同的分布区。

  8.哈希 Hash 

  哈希表为大型数据库表提供表连接(join)和聚合查询(aggregation),提供最高的性能

  在使用Hash表的时候,SQL DW使用Hash函数,将每一行都分配到同一个分区。

  在数据库表中,定义其中一列为分区列,使用Hash函数将数据保存到同一个分区中

  下图说明了Hash Table

  

  9.复制 Replica

  复制表为数据量小的表,提供了最快的查询性能

  复制表在每个Work Node上缓存表的完整副本。因此,在使用复制表进行表连接(join)和聚合查询(aggregation)的时候,不会产生数据在Work Node上移动

  复制表最好用于数据量小的表,在表大小小于2GB时,复制表效果好 

  下图说明了复制Replica表

  

  

Azure SQL 数据库仓库Data Warehouse (2) 架构的更多相关文章

  1. Azure SQL 数据库仓库Data Warehouse (3) DWU

    <Windows Azure Platform 系列文章目录> 在笔者的上一篇文章中:Azure SQL 数据库仓库Data Warehouse (2) 架构 介绍了SQL DW的工作节点 ...

  2. Azure SQL 数据库仓库Data Warehouse (1) 入门

    <Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...

  3. Azure SQL 数据库仓库Data Warehouse (4) 2018 TechSummit 动手实验营

    <Windows Azure Platform 系列文章目录> 上传一下之前在2018 TechSummit的动手实验营:Azure数据仓库PaaS项目架构规划与实战入门 包含PPT和Wo ...

  4. Azure SQL 数据库弹性池现已面市

    我们高兴地宣布Azure SQL 数据库弹性池现已正式面市.弹性池自去年试运行以来,得到许多软件即服务(SaaS)供应商和企业开发人员的认可,他们利用弹性池管理持续增长的云数据库和应用程序,成果高效. ...

  5. Azure SQL 数据库:新服务级别问答

    ShawnBice   2014 年 5 月 1 日上午 11:10 本月初,我们庆祝了SQL Server 2014 的推出,并宣布正式发布分析平台系统,同时分享了智能系统服务预览版.Quentin ...

  6. 如何将Azure SQL 数据库还原到本地数据库实例中

    原文:https://www.jerriepelser.com/blog/restore-sql-database-localdb/ 原文作者: Jerrie Pelser 译文:如何将Azure S ...

  7. 试用 Azure Sql 数据库

    我们的12月试用账号的免费服务里有一个Azure Sql服务,最近正好自己做一个小工具需要一个数据库,正好可以把它当测试库顺便体验一把Azure Sql. 概述 Azure SQL 数据库 Azure ...

  8. Azure SQL 数据库新服务级别现已正式发布

    T.K.Ranga Rengarajan   2014 年 9 月 10 日上午 11:00 我们很高兴地宣布,新的 SQL 数据库服务级被基本.标准和高级级别现已正式发布.这些服务级别中含有内置且可 ...

  9. Azure SQL 数据库:服务级别与性能问答

    ShawnBice    2014 年 5 月 5 日上午 10:00 几天前,我发表了一篇文章,并就 4 月 24 日发布的适用于Windows Azure SQL 数据库的新服务级别提供了一些预料 ...

随机推荐

  1. JavaScript中的内置对象-8--1.Array(数组)-Array构造函数; 数组的栈方法; 数组的转换方法; 数组的操作方法; 删除-插入-替换数组项; ECMAScript为数组实例添加的两个位置方法;

    JavaScript内置对象-1Array(数组) 学习目标 1.掌握任何创建数组 2.掌握数值元素的读和写 3.掌握数组的length属性 如何创建数组 创建数组的基本方式有两种: 1.使用Arra ...

  2. 20165228 2017-2018-2 《Java程序设计》第1周学习总结

    20165228 2017-2018-2 <Java程序设计>第1周学习总结 教材学习内容总结 JAVA程序的组成:多个书写独立的类组成,class后为类名,类名后的{ }里为类体 JAV ...

  3. 【leetcode】35-Search Insert Position

    problem Search Insert Position 一种容易想到的是暴力破解法,一种是常用的二分法. 暴力破解法1(不推荐) class Solution { public: int sea ...

  4. Unity 3D光源-Directional平行光/逆光效果,光晕详解、教程

    Unity4大光源之平行光 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  5. Linux下安装Blender

    Blender在Windows下,可以在官方直接下载免安装的版本,下载解压缩就能用. 在Linux下稍微麻烦一点点. 如下3步安装的blender不一定是最新版本,且安装完成后发现设置中文会变为方块. ...

  6. XML映射配置文件

    XML映射配置文件 http://www.mybatis.org/mybatis-3/configuration.html Type Handlers 类型处理器 每当MyBatis在Prepared ...

  7. CentOS7.0防火墙以及开关机命令

    CentOS 7.0默认使用的是firewall作为防火墙 查看防火墙状态firewall-cmd --state 停止firewallsystemctl stop firewalld.service ...

  8. 【BZOJ1305】【CQOI2009】 dance跳舞

    看menci的博客点出二分的思路然后做出来,menci太强辣 原题: 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲. ...

  9. 我的vim(持续更新)

    保存并退出:wq 退出但不保存修改:q! 不退出vi使用shell(bash)命令:!bash (如果想回到vi,bash下输入exit回车) 设置行号 :set nu 取消行号:set nonu 设 ...

  10. MySQL Replication--修改主键为NULL导致的异常

    测试环境:MySQL 5.5.14/MySQL 5.6.36 测试脚本: create table tb001(id int primary key,c1 int); alter table tb00 ...