最近有幸参加了微软专家进行的为期一周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培训简记的更多相关文章

  1. PDW中的Split Querying Process

    最近看了关于 SQL Server 的分布式处理方面的论文,觉得它提出的 Polybase 跟之前看过的 HadoopDB 有些神似,这里做个小总结(抽空再把 HadoopDB 的总结贴出来). 不算 ...

  2. 如何搭建自己的SPRING INITIALIZR server

    这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...

  3. Atitit 教育与培训学校 的计划策划 v2

    Atitit 教育与培训学校 的计划策划 1. 历史大趋势,教育的普及化1 2. 我们的目标,人人可以接受硕士博士教育,确保全球60亿人的普世化教育1 3. 学校的注册,可以选择在全球费用最优惠的地方 ...

  4. Atiti  attilax主要成果与解决方案与案例rsm版 v2

    Atiti  attilax主要成果与解决方案与案例rsm版 v2 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文化建设系列1 # ...

  5. 知道创宇研发技能表v2.2

    知道创宇研发技能表v2.2 2014/3/9 发布 by @知道创宇(www.knownsec.com) @余弦 & 行之 知道创宇是国内Geek十足且普遍被认为特别有前途的互联网安全公司, ...

  6. 【转】知道创宇研发技能表v2.1

    转自:http://blog.knownsec.com/Knownsec_RD_Checklist/v2.1.html# 知道创宇研发技能表v2.1 创建时间:2012/12/1 2013/4/26 ...

  7. 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 ...

  8. Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx

    Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...

  9. 知道创宇研发技能表v2.1

    创建时间:2012/12/1 2013/4/26 公开发布 2013/7/15 新增:牛人1,2,3 2013/7/20 优化:成长,增加:小事心态.任务拆分.方法论 2013/8/12 更新:Web ...

随机推荐

  1. python求100以内素数

    python求100以内素数之和 from math import sqrt # 使用isPrime函数 def isPrime(n): if n <= 1: return False for ...

  2. ApplicationLoader登录失败. Please sign in with an app-specific password.

    打包时登录ApplicationLoader时 报错:Please sign in with an app-specific password. You can create one at apple ...

  3. error 'there is already an open datareader associated with this command which must be closed first'

    This can be easily solved by allowing MARS in your connection string. Add MultipleActiveResultSets=t ...

  4. (转)使用 DB2 HADR 选择用于灾难恢复的 SUPERASYNC 模式

    使用 DB2 HADR 选择用于灾难恢复的 SUPERASYNC 模式 Vishnu G 和 Hemant Singh2013 年 6 月 25 日发布 WeiboGoogle+用电子邮件发送本页面 ...

  5. (转)MYSQL线程池总结(一)

    MYSQL线程池总结(一)  原文:http://www.cnblogs.com/cchust/p/4510039.html 线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应 ...

  6. 【Java并发编程】:内存可见性

    加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性.我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程 ...

  7. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  8. Android4.0 Launcher 源码分析3——WorkSpace结构(滑动)

    3.WorkSpace结构(滑动) 桌面的左右滑动功能主要是在PagedView类中实现的,而WorkSpace是PagedView类的子类,所以会继承PagedView中的方法.当我们的手指点击Wo ...

  9. Promise对象的含义和基本用法

    1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件 (通常是一 ...

  10. nginx 配置说明及优化

    一.配置说明 1.  worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8). 2.  worker_cpu_affin ...