星期六, 九月 29, 2007

DB2 - DPF - database partitioning feature

总体来说,DB2是个很不错的东西,但是DB2和ORACLE之间有很多区别,尤其在集群和扩展方面。
DB2在高可用方面有HA和HADR技术。
DPF就是是数据库分区,可以通过节点的扩充来达到性能的提升,也就是主要满足高性能需求的,而绝非满足高可用需求的,相反,使用DPF带来相应的高可用设置将非常复杂,不建议非专业用户使用。
DPF更适合使用在OLAP场合,也就是数据分析,数据仓库,超大数据量,可以使用多台低档次机器来提升总体的相应效率,达到性能的提高。而在OLTP场景下,对系统稳定性和备份要求特别高,出现故障的短时间接管要求也更高,是不太适宜使用DPF特性的。
如果有一个或多个分区崩溃(甚至没有 HA),则可以运行 DPF,但是崩溃的分区上的数据将不再可用。您永远不必担心 DB2 给出不正确的结果,因为如果不能访问在满足某个查询时需要访问的一个分区的话,DB2 将返回一个错误(例如 SQL1229)。即使只有编目分区可用,对于编目视图的一条 SELECT 语句仍将成功。
小的表根本就不应该分区,而中等大小的表又不应该展开到太多的分区上:这两种错误都会得不偿失。经验法则是,不要将行数少于100,000、大小小于 20MB 的表分区。//注:MySQL数据库可以很好的处理100万条记录的表。
DPF适合的表:大型表 —— 大到无法仅依靠单独一组 CPU 和 I/O 通道来处理,最大的数据库表。它们常常包含数亿行数据,有时候甚至包含数千亿行数据。Fact tables are the largest database tables. They often contain hundreds of millions of rows and sometimes hundreds of billions of rows.

何时分区,为何分区
具有 DPF 功能的 DB2 UDB ESE 是管理 OLAP、数据仓库和数据挖掘工作负载的理想选择。对于大型 OLTP 工作负载,它也是很好的选择。最常见的分区环境由每个物理系统上的一个数据库分区组成,这些物理系统组成数据库分区集群。每个数据库分区上的数据库管理器使用每个系统上的处理器来管理数据库中属于该分区的那部分数据。
由于数据被划分在多个数据库分区上,因而可以使用多台计算机上的多个处理器的处理能力来满足对信息的请求。数据检索和更新请求被自动分解成一些子请求,然后这些子请求在相应的数据库分区中并行地执行。每多一个服务器,就意味着将有更多的 CPU、内存和更多的磁盘用于分区数据库。
性能的提升源于这样的事实:大量的数据被划分成更小的、更易管理的块,每个分区/系统可以同时运行。如果要处理提取、转换和载入操作(ETL),而批处理窗口又比较小,那么可以考虑使用 DPF。例如,DB2 LOAD 可以在每个分区上同时运行,负载操作可以并行地分摊到多个服务器上。创建索引的性能也将显著提升。而且,通过使用 DPF,可以显著缩短备份和恢复时间,因为每台参与分区的机器需要处理的数据量更小了。

对本机 XML 数据存储的限制

本机 XML 数据存储功能需要遵守一些限制。下面概述了主要限制。有关更多详细信息,请参阅特定功能的文档。
对 XML 列定义的限制
只能在使用 UTF-8 代码集定义的数据库的表中定义 XML 列。存储在 XML 列中的 XML 文档的结构必须良好。虽然在结构上对存储在数据库中的 XML 值的大小没有限制,但与数据库交换的已序列化 XML 数据的大小限制为 2GB。
XML 列:
不能作为键列(包含主键、外键、唯一键、多维集群(MDC)表的维键、范围集群表的顺序键、分布键和数据分区键)包括。
不能是任何索引的一部分(XML 数据索引除外)
不能具有 WITH DEFAULT 子句指定的缺省值;如果列可空,则列的缺省值是 NULL
不能在范围集群表(RCT)中使用
不能在多维集群(MDC)表中使用
不能在具有分布键的表中使用
不能在按范围分区的表中使用
不能包括在类型表和带类型视图中
不能添加至对其定义了 1 类索引的表(请注意,建议不要使用 1 类索引;自 DB2 UDB 版本 8.1 开始创建的新索引为 2 类索引)
不能在 CHECK 约束中引用(VALIDATED 谓词除外)
不能在生成列中引用
不能在 CREATE TRIGGER 语句的触发操作中引用
不能在可滚动游标的选择列表中指定
检索 XML 数据时导致禁用数据分块
对 XML 列创建索引(也称为基于 XML 列的索引)还存在一些其他限制。请参阅下面的“相关参考”一节。
对数据库分区的限制
使用本机 XML 数据存储的任何功能会导致将来无法使用随 DB2 企业服务器版提供的数据库分区功能。
不能在定义了多个数据库分区的数据库的表中定义 XML 列或 XML 模式存储库(XSR)对象。
如果数据库是使用单个数据库分区定义的并且包括 XML 列或 XSR 对象,则不能添加新数据库分区。
对实用程序的限制
不支持使用 Load 实用程序将数据装入到包含 XML 列的表中。应使用 Import 和 Export 实用程序来移动 XML 数据。

参考文章:
英文有图http://www.db2mag.com/db_area/archives/2003/q2/snow.shtml
中文无图http://www.moon-soft.com/doc/15643.htm
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.embed.doc/doc/r0022679.htm