它是和Oracle Exadata PK的吗?


数据仓库一体机

什么是一体机

一体机(Applicance)并没有一个通用的定义,一体机应该具备以下的一些特征。它应该是为特定的应用领域专门设计的设备,针对特定的用途集中优化,在特定的领域内提供一套完整的解决方案,需要很低的维护成本。对于最终用户来说一体机应该是能够快速简易的安装,通过标准的接口和非常简单的操作来满足用户的需求。一体机是个黑盒子,用户告诉它想要做什么,一体机快速的把结果或答案反馈给用户。IPod就是一个很好的一体机例子,它简单化并且彻底改革了数字娱乐领域。

Netezza-数据仓库领域真正的一体机

值得骄傲的是Netezza的产品是真正的,是专门为数据仓库设计的一体机。在数据仓库领域许多厂商都推出的自己的一体机产品。有些产品只提供软件,用户需要自行的集成软件与硬件。有些产品虽然把软件与硬件结合在一起,但并不是专门的为数据仓库而设计和优化。这些产品都需要非常复杂并漫长的人工调优过程,而且后续的维护成本也很高昂。说Netezza是真正的一体机是因为它解决了以上问题。它是软件与硬件不可分离的紧密结合体,无缝的整合数据库管理系统(DBMS)、服务器(Server)和存储设备(Storage)。不需要复杂配置和调优就可以取得非常优异性能。“Netezza”是印度某种方言中的一个词,在英语中的意思是“RESULT”。这个名字也非常恰如其分的体现了Netezza一体机的特点。需要结果么?那么只需要提出问题。

简单性

Netezza一体机与传统数据仓库的一个很大区别在于它的简单性。这种简单性体现在方方面面。

·安装与部署的简单性:从外部来看Netezza一体机就是一个大盒子,给这个大盒子插上电配置好服务IP那它就可以对外提供服务了。而传统的数据仓库往往需要花很大的心思在物理规划设计上。这包括规划存储、配置网络以及安装所需要的软件等等。

·管理和维护的简单性:听起来似乎有点不可思议,但事实确实如此-Netezza几乎不需要执行任何传统数据仓库DBA所执行的任务

o没有索引(index

o不需要性能调优(tuning

o不需要存储管理:没有dbspace/tablespace规划和配置,没有redo/physicallong规划和配置,没有表的page/block/extent规划和配置,无需临时表空间的分配与监控,无需RAID级别的选择,无需逻辑卷的规划与创建时间

o无需配置操作系统内核参数以及维护建议的操作系统补丁级别

o简单的数据分区策略:哈希或者随机

简单性所带来到好处是巨大的。这种简单性可以节省出昂贵的DBA管理和维护成本,节省出的资源可以投入到更能够创造出商业价值的任务上而不是乏味的DBA任务。是一个非常简单的创建数据库例子。可以看出Netezza的语句十分简单。当然其他的数据仓库语句也可以简单的和Netezza一样,但是如果那样的话创建出的数据库是没有经过优化会比清单1中创建出的数据库性能差很多。Netezza的优势就在于用简单的语句(更少的管理与维护)也可以创建出性能很好的数据库。在一些实际的数据仓库数迁移项目中,其它数据仓库数千行的建表语句(包括分区和索引部分)转换到Netezza只用十几行就能代替,并且还能取得更好的性能。由于篇幅的关系这里就不列出建表语句的例子了


清单1在某数据仓库上创建一个database的语句

CREATEDATABASETEST

LOGFILE'E:\OraData\TEST\LOG1TEST.ORA'SIZE2M,

'E:\OraData\TEST\LOG2TEST.ORA'SIZE2M,

'E:\OraData\TEST\LOG3TEST.ORA'SIZE2M,

'E:\OraData\TEST\LOG4TEST.ORA'SIZE2M,

'E:\OraData\TEST\LOG5TEST.ORA'SIZE2M

EXTENTMANAGEMENTLOCALMAXDATAFILES100

DATAFILE'E:\OraData\TEST\SYS1TEST.ORA'SIZE50M

DEFAULTTEMPORARYTABLESPACEtempTEMPFILE'E:\OraData\TEST\TEMP.ORA'SIZE50M

UNDOTABLESPACEundoDATAFILE'E:\OraData\TEST\UNDO.ORA'SIZE50M

NOARCHIVELOG

CHARACTERSETWE8ISO8859P1;



清单2Netezza上创建一个database的语句

CREATEDATABASETEST


Netezza一体机架构

之前的介绍中说用户可以把Netezza一体机看作一个黑盒子。那这个黑盒子是如何在保持简单性的同时又提供高性能的呢?这就需要我们打开黑盒子看一看Netezza一体机的独特架构。


主要包括四大关键组件。SMP主机、S-Blades、磁盘存储柜和网络结构

Netezza1000

Netezza1000是Netezza一体机很具代表性的一个型号。在NetezzaIBM收购之前这个型号的名称是NetezzaTwinFin

·SMP主机是两台高性能的Linux服务器,两台服务器一台是活动的,另外一体是备机。BI应用程序的请求都会通过活动的SMP主机来提交。SMP主机编译并且生成最优的可执行代码,分发生成的可执行代码给S-Blades执行。最后收集并汇总S-Blades返回的结果返回给用户。

·S-Blades是智能的处理节点也是Netezza魔法发生的地方。每个S-Blades都是一台独立的服务器它包含了个一台标准的刀片服务器和一块Netezza特有的数据库加速卡。刀片服务器和数据库加速卡通过IBMsidercar技术整合起来,使它们在逻辑上和物理上都成为一个整体。Netezza1000的每个S-Blades节点包括24核的CPU42核的FPGA引擎以及16GB的内存。

·磁盘存储柜包含了高密度高性能的磁盘。每块磁盘包含表的一个数据片(dataslice)。所有磁盘上的某个表的数据片合起来组成一个表完整的数据。每块磁盘上还包含另外一块磁盘上的数据镜像。磁盘阵列柜通过高速的通道(3Gb/sSAS)和S-Blades连接在一起。

·网络结构并没有在中标注出来。主要的网络链接线路都在机柜的背面。Netezza1000一体机的各个组件是通过高速网络连接起来的。2描述了基本网络结构。网络有两种一种是IP网络另一种是SAS存储网络。IP网络是服务于SMP主机与S-Blades节点之间以及不同S-Blades节点之间的数据通讯。IP网络中的协议是经过深度定制的,专门为了Netezza的应用环境而优化,能够支持上千节点之间同时的大数据量传输。SAS网络连接了S-Blades节点与磁盘存储柜,使S-Blades能够高速的访问磁盘上的数据。


Netezza一体机架构

Netezza的AMPPAsymmetricMassivelyParallelProcessing)是一个两层结构,如3所示,专门为了处理多用户的大数据量查询而设计。AMPP结构是SMP前端和sharednothingMPP后端的完美结合。前端是SMP的高性能Linux主机。其主要功能是通过标准的接口(SQLODBCJDBCOLEDB)对外提供服务。SMP主机负责编译从应用程序发出的查询请求,生成优化过的可执行代码片段,称之为snippet,然后分发这些代码片段到所有的S-Blades上并行执行。当所有的S-Blades都执行完毕SMP主机汇总结果后把最终的结果返回给应用程序。后端是由大量的S-Blades组成,主要的数据操作过程都是在S-Blades上完成的。S-Blades之间是相互独立的,每个S-Blades都会占有自己磁盘和数据片(dataslice)在并行处理的时候并不会相互影响。这种结构的好处是可以通过增加S-Blades节点和其所使用的磁盘来使性能得到近似线性的提升。Netezza1000S-Blades数量可以扩展到120个。在面对超大量数据的时候,这种分而治之的方法能收到立竿见影的效果。这种结构也提供了极大的灵活性通过改变磁盘、S-Blades和内存的配比来创建出不同型号的Netezza一体机。比如增加磁盘数量减少S-Blades数量,这样的一体机查询性能有所减弱,但数据容量有所增大。可以用来存放历史数据。


FPGA与数据流处理

在架构层面上,灵活的AMPP架构是Netezza一体机具有高性能的一个重要因素,另外一个起到决定性作用的因素就是Netezza一体机引入的数据库加速卡和数据流处理概念。这些都发生在S-Blades里面,它们极大的增强了一体机数据处理能力。下面将更深入的进入到魔法发生的地方-S-Blades里面看看它的独特之处。S-Blades包括一个刀片服务器(8CPU)和一块数据加速卡(8FPGA核)。正常情况下在Netezza1000一体机中一个S-Blades管理8个数据片(dataslices)。一个CPU核与一个FPGA核再加上一个数据片组成了一个逻辑的处理单元,称之为SnippetProcessor。每个SnippetProcessor都独立的负责一个数据片的处理,这样当运行查询的时候一个S-Blades中就有个8个这样的逻辑处理单元并行的处理8个数据片。


CPU和 FPGA各自都有明确的分工对任务的不同阶段进行处理,形成了流水线作业大大提高了性能。展示了一个逻辑处理单元(1CPU+1FPGA+1数据片)各个组件的分工以及它们是如何协同工作的。SMP主机编译生成可执行的代码片段并且把它们分发到S-Blades上去执行。这个代码片段实际上包含两部分内容一部分是用来配置FPGA的参数另一部分是CPU可执行的程序。FPGA配置好了参数之后便开始根据配置的参数来执行,这时将建立一个数据流。下面将结合一条SQL语句来解释一下数据是如何在流中被操作的。

SQL:selectc1,c2,sum(c3)fromt1wherec2=999假设表t1包含10列分别是c1c10

1FPGA从数据片中读取所查询表t1的所有数据块到内存中.这里读取的知识表t1的一部分数据,其他的数据存储在其它的数据片上。

2磁盘上所有的数据都是经过压缩的,压缩的好处是可以有效的减少磁盘的IOFPGA对数据进行解压

3FPGA对数据进行投影操作,只保留操作中能用到的列。这样做可以减少数据的大小,使数据传输和处理起来都更加高效。效果对宽表尤其明显。SQL语句中选择了c1,c2c3三列其余的列都没有用到,这样只保存这三列其余列全部丢弃掉。

4FPGA对数据进行过滤,只保留用户应该得到的数据。这里有两层过滤一层是由于查询条件限制需要过滤掉的数据,SQL语句中的c2=999会在这个阶段产生作用。还有一层过滤是要过滤掉还实物还没有提交的数据。

5CPU对过滤好的数据进行聚合、链接和汇总等操作。然后返回出这个逻辑处理单元的结果。SQL语句中的sum(c3)在这个阶段被执行。

6SMP主机收到所有的逻辑处理单元的结果后再汇总得到最终结果,返回给用户。

这整个过程就像是一个工厂里面的装配线一样,当数据流过这条装配线就会得到结果。当工厂里面有成百上千条流线同时工作的时候,得到结果自然就是很快的事情。

关键技术特性

分区数据库与分区键

Netezza是一个分区的数据库,一个表的数据是分布所有的数据片上的。一条记录存储在那个数据片上是由分区键来决定的。有两种方式来制定分区键,一是定义表的时候可以指定一个或多个列来作为表的分区键,另一个是用随机的方式(round-robin)来给记录分区。清单3列出了其基本语法.如果指定了列作为分区键,Netezza会根据所指定用哈希算法算出一条记录数据属于那个分区。如果没有指定分区键则自动用第一个列作为分区键


清单3指定分区键

Createtabletable_name(

Column_name1data_type1

Column_name2data_type2

Column_name3data_type3)

[distributeon(column_name1,column_name2,…]|

[distributeonrandom]


分区键的选择对性能的影响是至关重要的,这也是Netezza中为数不多的可以管理和调优的地方。应该尽可能的使数据均匀的分布在所有的数据片上。下面有一些基本的原则

·选择有大量唯一值的列做分区键,列的唯一值的数量越多数据的分布就越均匀。不要使用bool类型的列作为分区键,那将会导致所有的数据只会分布在两个数据片上。

·对于表关联的情况,应该选择关联条件里面的所有列作为两个表的分区键,这样关联操作只会在数据片自己的分区内发生。每个数据片都不会广播自己的数据到其它分区。

压缩

与传统的数据仓库不同的,在Netezza一体机中所有的用户数据都是经过压缩存储的,而并不像传统数据仓库那样可以选择不压缩进行存储,这也体现了Netezza的简单性。数据仓库中性能的瓶颈往往出现在磁盘上,数据压缩存储的好处是可以减少磁盘的IO压力,FPGA引擎负责将数据解压缩成可读的内容。Netezza的压缩对用户来说是完全透明的,它支持所有的数据类型,不要任何的调优和管理。压缩算法把记录根据列分成不同的数据列流,对每个列流独立的进行压缩,但在存储的时候保持行结构,这种具有专利的压缩算法保证了432倍的压缩率,极大的减少了磁盘IO的压力。

ZoneMaps

ZoneMaps是Netezza很独特的技术,它可以使数据块在还没有被从磁盘上读出来之前就知道这块数据是否包含查询中所包含的数据,如果不包含则直接跳过该数据块。这种方式极大的减少的磁盘的IO,大大提高了查询的性能。传统的数据仓库则需要读出数据块然后再判断是否需要里面的数据。ZoneMaps是什么呢?在Netezza中数据是以数据块的方式存储的磁盘上的,对数据的读写操作的最小单位是数据块,每个数据块的大小是3MBZoneMaps保存了每张表的每个数据块上表的各个列的最大值和最小值。默认情况下整数、日期和时间类型的列会生成ZoneMaps统计信息。5说明了ZoneMap是如何减少磁盘IO的。表TradeTable使用了3个数据块来存放数据。ZoneMaps收集了其中两列DataCust_ID的在每个数据块上的最大值和最小值。当语句“select*fromTradeTablewheredata=02”执行的时候数据库系统首先检查ZoneMaps,根据ZoneMaps的指示,只有第二个数据块中的数据有满足条件的记录,所以第一个和第三个数据块的数据不会被读入。



ZoneMaps也是自动维护的并不需要用户来进行干预。ZoneMaps会在以下的条件下自动进行更新:

·运行GENERATESTATISTICS命令收集统计信息时

·用nzload进行数据装载时

·插入和更新数据时

·运行GROOMTABLE重新整理数据块时

工作负载管理

现今的数据仓库大多是多用户同运行混合任务类型的系统。工作负载管理是这样的系统上不可取少的一项功能。Netezza提供了一套简单又灵活的工作负载管理方案,包括以下一些策略:

·资源保障分配(GRA):通过定义资源组,给每个资源组分配可使用资源的范围来控制不同用户对系统资源的使用比例。

·分优先级的执行查询(PQE):可以给每个查询赋予低中高的优先级,当系统资源紧张的时候高优先级的查询会优先执行。PQEGRA可以结合起来使用,即在相同的资源组里面的查询也可以通过指定不同的优先级来进行区分。

·短查询优先(SQB):保证短查询不受大数据量查询的影响,即使在系统资源很紧张的时候短查询也能很快的返回结果而不必等到大数据量查询结束。这个是通过系统预留出一定数量的资源来实现的。Netezza会根据生成的执行计划来判断一个查询是否是短查询,默认情况下认为一个查询如果少于2秒就是一个短查询。

高可用性

Netezza一体机的各个部件都存在冗余的备份,不存在单点失败的情况。其高可用性主要体现在以下三个层次。

·SMP主机:从图1上可以看出一体机包含两台SMP主机,这两天主机是主备关系,其上面运行的LinuxHA软件可以保证在主机出现宕机的情况下,所有的服务都可以转移到备机上。两台主机之间并没有采用共享磁盘的方式来保持共享的关键数据,而是采用了DRBD来同步需要共享的关键数据。

·S-Blades:从图1上我们还可以看出每个刀片服务器底座包含了6S-Blades。当其中有的一台S-Blades出现问题的时候,Netezza会自动的把失败的的S-Blades所管理的磁盘分配给同一个底座上其他的S-Blades进行管理。对于只读的查询用户是感觉不到这种切换的存在。

·磁盘:每块磁盘上都保存有一个数据片的数据,同时也保存着另外一个数据片数据的镜像备份。例如磁盘1上有数据片1上的数据以及数据片2上数据的镜像,磁盘2上有数据片2的数据以及数据片1的镜像。当磁盘1失败的时候,S-Blades会自动的去访问磁盘2上的镜像数据,系统仍能维持正常的运行。此外磁盘存储柜里的还有一些空闲磁盘他们不属于任何的数据片,当有磁盘失败空闲的磁盘会重新的生成数据,例如磁盘1失败,那么空闲磁盘X会从磁盘2复制数据片1的镜像和数据片2的数据重新生成失败的磁盘1,这个过程需要一些时间,在这个过程中S-Blades还是通过磁盘2来访问数据片1的数据。一旦这个过程完成S-Blades会通过新生成的磁盘来访问数据片1的数据。整个过程对于用户来说也都是透明的

结束语

一体机技术是今后数据仓库发展的趋势,各大厂商也都加大了在这个方向的投入。通过本文,您应该对Netezza一体机技术有所了解,理解了它为什么外表看起来了如此简单却又有着非凡的性能表现。希望您能有机会亲自体验一下它给你带来的惊喜。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值