最近有幸参加了微软专家进行的为期一周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分钟之内就可以搭建完成。