Netezza

Netezza 是专门的数据仓库数据库。

Netezza 将存储、处理、数据库和分析融入到一个高性能数据仓库设备中,该设备专为使大数据高级分析更简单、更迅捷和更易用而设计

数据仓库一体机

什么是一体机

一体机 (Applicance) 并没有一个通用的定义 , 一体机应该具备以下的一些特征。

它应该是为特定的应用领域专门设计的设备,针对特定的用途集中优化,在特定的领域内提供一套完整的解决方案,需要很低的维护成本。

对于最终用户来说一体机应该是能够快速简易的安装,通过标准的接口和非常简单的操作来满足用户的需求。

一体机是个黑盒子,用户告诉它想要做什么,一体机快速的把结果或答案反馈给用户。IPod 就是一个很好的一体机例子,它简单化并且彻底改革了数字娱乐领域。

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

值得骄傲的是 Netezza 的产品是真正的,是专门为数据仓库设计的一体机。

在数据仓库领域许多厂商都推出的自己的“一体机”产品。

有些产品只提供软件,用户需要自行的集成软件与硬件。有些产品虽然把软件与硬件结合在一起,但并不是专门的为数据仓库而设计和优化。

这些产品都需要非常复杂并漫长的人工调优过程,而且后续的维护成本也很高昂。

说 Netezza 是真正的一体机是因为它解决了以上问题。它是软件与硬件不可分离的紧密结合体,无缝的整合数据库管理系统(DBMS)、服务器(Server)和存储设备(Storage)。

不需要复杂配置和调优就可以取得非常优异性能。“Netezza”是印度某种方言中的一个词,在英语中的意思是“RESULT”。

这个名字也非常恰如其分的体现了 Netezza 一体机的特点。需要结果么? 那么只需要提出问题。

简单性

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

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

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

没有索引(index)

不需要性能调优(tuning)

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

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

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

简单性所带来到好处是巨大的。

这种简单性可以节省出昂贵的 DBA 管理和维护成本,节省出的资源可以投入到更能够创造出商业价值的任务上而不是乏味的 DBA 任务。

清单 1和 清单 2是一个非常简单的创建数据库例子。

可以看出 Netezza 的语句十分简单。

当然其他的数据仓库语句也可以简单的和 Netezza 一样,但是如果那样的话创建出的数据库是没有经过优化会比清单 1 中创建出的数据库性能差很多。

Netezza 的优势就在于用简单的语句(更少的管理与维护)也可以创建出性能很好的数据库。

在一些实际的数据仓库数迁移项目中,其它数据仓库数千行的建表语句(包括分区和索引部分)转换到 Netezza 只用十几行就能代替,并且还能取得更好的性能。

由于篇幅的关系这里就不列出建表语句的例子了

关键技术特性

分区数据库与分区键

Netezza 是一个分区的数据库,一个表的数据是分布所有的数据片上的。

一条记录存储在那个数据片上是由分区键来决定的。有两种方式来制定分区键,一是定义表的时候可以指定一个或多个列来作为表的分区键,另一个是用随机的方式(round-robin)来给记录分区。

清单 3列出了其基本语法 . 如果指定了列作为分区键,Netezza 会根据所指定用哈希算法算出一条记录数据属于那个分区。

如果没有指定分区键则自动用第一个列作为分区键

Create table table_name( 
                   Column_name1 data_type1 
                   Column_name2 data_type2 
                   Column_name3 data_type3) 
                  [distribute on (column_name1, column_name2,  ] | 
                  [distribute on random]

分区键的选择对性能的影响是至关重要的,这也是 Netezza 中为数不多的可以管理和调优的地方。

应该尽可能的使数据均匀的分布在所有的数据片上。

下面有一些基本的原则

选择有大量唯一值的列做分区键,列的唯一值的数量越多数据的分布就越均匀。

不要使用 bool 类型的列作为分区键,那将会导致所有的数据只会分布在两个数据片上。

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

每个数据片都不会广播自己的数据到其它分区。

压缩

与传统的数据仓库不同的,在 Netezza 一体机中所有的用户数据都是经过压缩存储的,而并不像传统数据仓库那样可以选择不压缩进行存储,这也体现了 Netezza 的简单性。

数据仓库中性能的瓶颈往往出现在磁盘上,数据压缩存储的好处是可以减少磁盘的 IO 压力,FPGA 引擎负责将数据解压缩成可读的内容。

Netezza 的压缩对用户来说是完全透明的,它支持所有的数据类型,不要任何的调优和管理。

压缩算法把记录根据列分成不同的数据列流,对每个列流独立的进行压缩,但在存储的时候保持行结构,这种具有专利的压缩算法保证了 4 到 32 倍的压缩率,极大的减少了磁盘 IO 的压力。

Zone Maps

Zone Maps 是 Netezza 很独特的技术,它可以使数据块在还没有被从磁盘上读出来之前就知道这块数据是否包含查询中所包含的数据,如果不包含则直接跳过该数据块。

这种方式极大的减少的磁盘的 IO,大大提高了查询的性能。

传统的数据仓库则需要读出数据块然后再判断是否需要里面的数据。

Zone Maps 是什么呢?

在 Netezza 中数据是以数据块的方式存储的磁盘上的,对数据的读写操作的最小单位是数据块,每个数据块的大小是 3MB。

Zone Maps 保存了每张表的每个数据块上表的各个列的最大值和最小值。

默认情况下整数、日期和时间类型的列会生成 Zone Maps 统计信息。

图 5说明了 Zone Map 是如何减少磁盘 IO 的。

表 TradeTable 使用了 3 个数据块来存放数据。

Zone Maps 收集了其中两列 Data 和 Cust_ID 的在每个数据块上的最大值和最小值。

当语句“select * from TradeTable where data=02”执行的时候数据库系统首先检查 Zone Maps,根据 Zone Maps 的指示,只有第二个数据块中的数据有满足条件的记录,

所以第一个和第三个数据块的数据不会被读入。

Zone Maps

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

运行 GENERATE STATISTICS 命令收集统计信息时

用 nzload 进行数据装载时

插入和更新数据时

运行 GROOM TABLE 重新整理数据块时

工作负载管理

现今的数据仓库大多是多用户同运行混合任务类型的系统。

工作负载管理是这样的系统上不可取少的一项功能。

Netezza 提供了一套简单又灵活的工作负载管理方案,包括以下一些策略:

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

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

短查询优先(SQB):保证短查询不受大数据量查询的影响,即使在系统资源很紧张的时候短查询也能很快的返回结果而不必等到大数据量查询结束。这个是通过系统预留出一定数量的资源来实 现的。

Netezza 会根据生成的执行计划来判断一个查询是否是短查询,默认情况下认为一个查询如果少于 2 秒就是一个短查询。

高可用性

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

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

S-Blades:从图 1 上我们还可以看出每个刀片服务器底座包含了 6 个 S-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 的数据。

整个过程对于用户来说也都是透明的

参考资料

https://www.ibm.com/analytics/netezza

百科

基于 IBM SPSS Modeler 的 IBM Netezza Analytics 数据库内数据挖掘应用

IBM Netezza 一体机技术