PDW V2培训简记
最近有幸参加了微软专家进行的为期一周PDW培训,将一些知识点记录如下:
不知道PDW是什么东西的,简单介绍一下:这是微软与HP/Dell合作推出的SQL Server数据仓库一体机,由HP或DELL提供硬件(机柜,四台服务器,两台交换机,IB),再由微软预装PDW版本的SQL Server 2012。购买了以后,直接通电就可运行。容量当然是可以从TB级增长到PB级,处理性能比普通SQL Server 2012快几十上百倍。主要用来进行大数据分析,不适合用于OLTP。
服务器配置:
四台物理的服务器:一台是控制服务器,一台是故障转移服务器,两台是计算节点服务器。
控制服务器上装了四个VM,分别是CTL、VMM、AD和MAD,计算节点每个有8个VM,总共16个计算节点。
两个计算节点通过SAS连接JBOD,四个服务器通过IB连接。
四台物理服务器做了集群,在FabricDOM域里,VM也进行了集群,在APPDOM里。
服务器装的是Windows 2012,不是R2。
尽管管理员密码是知道的,但是一旦装了其它东西,微软就不再提供支持。
使用和管理
可以通过SQLCMD使用。
可以通过DWLoader加载数据。
可以通过VS2012/2013的SSDT进行连接,连接方式跟普通SQL Server类似,但VS2012必须装新版的SSDT才能正确连接到PDW。正确的连接状态下,连接的图标是一个数据库集群样式,与普通的SQL Server连接不同。其中的表,不同的表(复制表,分布表)的图标也会有区别。连接以后,可以直接在VS里面进行创建数据库/表,修改等操作。没有GUI,基本上需要用语句。
可以通过SSIS(VS2012/2013的BI项目类型)进行数据加载。这也是微软推荐的导入数据的方式。
可以通过AdminConsole进行监控,通过DWconfig进行管理。
表结构
两种表:复制表,分布表。复制表就是每个计算节点上都完全相同的表。分布表是根据选定的字段进行哈希后存储在不同节点上的表。可以在创建时进行指定,也可以后期更改。
创建一个1G的复制表,会在每一个节点上都创建一个1G的表,创建一个16G的分布表,会在每个节点上创建1G的分表,合起来有16G。
创建表的操作是在CTL上进行的,PDW内部会建立一系列的SQL语句,到每个计算节点上分别建表,用户不需要知道这些实际表的名字(其实也非常不可读,加了很长的字符串)。CTL上的表实际是空壳。
许多字段类型不支持,包括GUID,Geometry,Text等。每行大小8k,没有主键和外键,没有自增,没有唯一索引。总之就不是一个OLTP的数据库。
基本上不应该进行数据更新和删除。删除应该直接使用Create TABLE as Select ...,类似于普通SQL的INSERT INTO ... Select ...,但比后者快8倍。
DSQL和DataMovement是PDW的核心
DSQL就是在PDW上执行SQL语句,特别是指Join和Group的时候,需要内在的对表进行一系列操作。理解这个机制才能正确的设计数据库。
Share Nothing是执行SQL语句时最希望的方式,就是说不需要在计算节点之间移动数据,每个节点执行自己的语句,查询结果发送给CTL,所有节点发送完毕,CTL把它们串起来就直接返回给客户端。没有数据需要移动,没有数据需要在CTL进行计算合并。
但Share Nothing不是那么轻易能做到的事情。多数情况下,都需要对数据进行移动,移动分为两大类:一种是需要在计算节点之间移动数据,一种是将数据从计算节点移动到CTL节点。
复制表如果Inner Join分布表,不需要移动,复制表和复制表之间也不需要。单独的复制表或分布表也不需要。
复杂的情况发生在分布表和分布表之间关联查询时。
以SELECT ... FROM A,B WHERE A.col1 = B.col1 AND A.col2 = value为例:如果A.col1和B.col1都是分布依据字段,而且数据类型完全相同,那么就可以达到Share Nothing的结果,性能最优。
只要有其中一个字段不是分布依据,那就会产生数据移动,PDW内在的会判断采用哪一种移动,如果有一个数据表很小,那么会把它进行复制,就是变成复制表,这种叫做Broadcast Move。其他情况下,会进行Shuffle Move,将数据在节点之间进行重新分布,淡然最后数据会归位。这样会有性能开销,但数据移动是分布数据库不可避免的。
这决定了设计数据库的时候,就应该考虑到使用的一些场景,会执行什么样的查询语句,基本上可以说,明细表的ID是肯定不能拿来做分布依据的,起码应该是类型ID之类的字段。
如果SQL语句中有Groupby语句,或者执行Count(),那么不可避免地要进行Patition Move,就是数据在节点上查询计算好之后,将每个节点的SUM保存到CTL节点,再进行汇总。
数据的移动还有很多种情况,但大多数情况就是上面这些。
应用模式
围绕PDW应该建立其他的数据库,进行专门化的工作。
1、OLTP的数据库,是应用系统的直接数据库,做增删查改。
2、Loading Server,将数据从OLTP分离出来后,保存在一个Loading Server上,ETL或者ELT导入到PDW。最佳办法是部署SSIS包进行定期任务。
3、Reporting Server,部署分析服务和报表服务,将PDW的分析结果保存在这个数据库中,对领导上层进行服务。
4、Backup Server,进行PDW的备份,不需要高性能的计算量,只需要高存储,通过它再往磁带库备份。PDW V1带有backup Server。从V2开始不带,为了缩减成本,需要用户自己搭建。
与Hadoop关系
通过叫Polybase的引擎,使你能像操作table那样操作Hadoop,包括读和写。它的实质是将你的SQL转换成MapReduce,在Hadoop中执行。
有三种方式搭建PDW支持的Hadoop:1.直接让HP/DELL来给你搭建,往PDW机架上放两个Hadoop服务器;2.自己搭建,只支持三家的Hadoop实现,包括微软还有另外两家的,名字没记住。Apache的不支持;3.使用Windows Azure的Hadoop,15分钟之内就可以搭建完成。
PDW V2培训简记的更多相关文章
- PDW中的Split Querying Process
最近看了关于 SQL Server 的分布式处理方面的论文,觉得它提出的 Polybase 跟之前看过的 HadoopDB 有些神似,这里做个小总结(抽空再把 HadoopDB 的总结贴出来). 不算 ...
- 如何搭建自己的SPRING INITIALIZR server
这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...
- Atitit 教育与培训学校 的计划策划 v2
Atitit 教育与培训学校 的计划策划 1. 历史大趋势,教育的普及化1 2. 我们的目标,人人可以接受硕士博士教育,确保全球60亿人的普世化教育1 3. 学校的注册,可以选择在全球费用最优惠的地方 ...
- Atiti attilax主要成果与解决方案与案例rsm版 v2
Atiti attilax主要成果与解决方案与案例rsm版 v2 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文化建设系列1 # ...
- 知道创宇研发技能表v2.2
知道创宇研发技能表v2.2 2014/3/9 发布 by @知道创宇(www.knownsec.com) @余弦 & 行之 知道创宇是国内Geek十足且普遍被认为特别有前途的互联网安全公司, ...
- 【转】知道创宇研发技能表v2.1
转自:http://blog.knownsec.com/Knownsec_RD_Checklist/v2.1.html# 知道创宇研发技能表v2.1 创建时间:2012/12/1 2013/4/26 ...
- Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性
Atitit jquery 1.4--v1.11 v1.12 v2.0 3.0 的新特性 1.1. Jquery1.12 jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.h ...
- Atitit 项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx
Atitit 项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...
- 知道创宇研发技能表v2.1
创建时间:2012/12/1 2013/4/26 公开发布 2013/7/15 新增:牛人1,2,3 2013/7/20 优化:成长,增加:小事心态.任务拆分.方法论 2013/8/12 更新:Web ...
随机推荐
- 部署虚拟环境安装Linux系统
目录 准备工作 安装linux系统 重置root管理员密码 源代码编译 R ...
- POJ 1050
#include <stdio.h> #include <string.h> #define mt 101 int main() { int a[mt][mt]; int st ...
- centos 6.8 解决ibus输入法不正常显示的问题
今天发现 ibus输入法打字时不正常显示,如下图
- Python 日期和时间的几种输出格式
在python中,我们可以使用 time 模块的 strftime 方法来格式化日期,例子如下: import time # 格式化成2016-03-20 11:45:39形式 print (time ...
- js前端日期格式化处理
js前端日期格式化处理 1.项目中时间返回值,很过时候为毫秒值,我们需要转换成 能够看懂的时间的格式: 例如: yyyy-MM-dd HH:mm:ss 2.处理方法(处理方法有多种,可以传值到前端 ...
- java 中几种常用数据结构
Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.几个常用类的区别 1.A ...
- Python -- Gui编程 -- Tkinter的使用 -- 基本控件
1.按钮 tkBtton.py import tkinter root = tkinter.Tk() btn1 = tkinter.Button(root, anchor=tkinter.E,\ te ...
- 深入JVM学习心得
前言 相信很多人和我一样长期使用java编程,却很少关注过JVM底层实现,这很大程度上是因为JVM设计的很精巧,因此平时项目也很少遇到涉及JVM的问题.但是一方面出于对java底层技术的好奇,另一方面 ...
- 8分钟丨教你玩转 API
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由织云平台团队发表于云+社区专栏 背景 当下,业界越来越多公司在项目架构设计时,会采用微服务架构.微服务架构,可以让我们的产品有更好的扩 ...
- ruby文件操作
Ruby代码 1.#读文件 2.f = File.open("myfile.txt", "r") 3.f.each_line do|line| 4.puts & ...