有两个概念不懂,大家帮忙解释一下!

[复制链接]
查看11 | 回复9 | 2016-2-2 09:36:33 | 显示全部楼层 |阅读模式
最近在看一些DB2的DPF方面的东西,有两个概念有一些搞不懂。
就是“分区兼容性”和“并置”两个概念。
资料是这样写的:
分区兼容性
可对分区键的对应列的基本数据类型进行比较,并可将它们声明为是分区兼容的(partition compatible)。分区兼容的数据类型具有如下属性:具有相同值但有不同类型的两个变量会按相同的分区算法映射至同一个分区号。 分区兼容性具有下列特征:
基本数据类型与另一个相同的基本数据类型兼容。
内部格式用于 DATE、TIME 和 TIMESTAMP 数据类型。它们彼此都不兼容,且都不与 CHAR 兼容。
分区兼容性不受带有 NOT NULL 或 FOR BIT DATA 定义的列的影响。
对兼容数据类型的 NULL 值的处理是完全相同的;对不兼容数据类型的 NULL 值的处理可能不相同。
用户定义的类型的基本数据类型用于分析分区兼容性。
对分区键中相同值的小数的处理是完全相同的,即使它们的标度和精度不同。
字符串中(CHAR、VARCHAR GRAPHIC 或 VARGRAPHIC)的尾部空格会被散列算法忽略。
BIGINT、SMALLINT 和 INTEGER 是兼容的数据类型。
REAL 和 FLOAT 是兼容的数据类型。
不同长度的 CHAR 和 VARCHAR 是兼容的数据类型。
GRAPHIC 和 VARGRAPHIC 是兼容的数据类型。
分区兼容性不适用于 LONG VARCHAR、LONG VARGRAPHIC、CLOB、DBCLOB 和 BLOB 数据类型,因为它们不能作为分区键。
并置
并置(collocation)是安置同一个数据库分区中包含相关数据的不同表中的行。并置的表使 DB2 可以更有效地使用连接策略。
您可能会发现,作为对特定查询的响应,两个或多个表频繁地提供数据。在此情况下,您会希望这样的表中的相关数据的位置尽可能地靠近。在数据库被物理地划分为两个或多个数据库分区的环境中,必须有一种方法可将划分的表的相关碎片尽可能地靠近。完成此过程的功能称为表并置。
当存取用于连接或子查询的多个表时,DB2(R) 通用数据库(DB2 UDB)能够识别要连接的数据是否位于相同数据库分区上。于是 DB2 就可以在存储数据的数据库分区上执行连接或子查询,而不必在数据库分区之间移动数据。这种局部地执行连接或子查询的能力具有显著的性能优点。
要发生并置,表必须:
在相同数据库分区组中,且这个数据库分区组不能处在再分配期间。(在再分配期间,数据库分区组中的表可能使用不同的分区映射 —— 它们不是并置的。)
有包含相同数量的列的分区键。
分区键的相应列是分区兼容的。
如果一个表在一个单分区数据库分区组中,且该分区组是在另一个表所在的同一个分区上定义的,那么也可以发生并置。

哪一个高手,能不能用通俗一点的语句说一下呀。最好能举一个列子!!!!实际运用中有什么好处呀~~~
[ 本帖最后由 foryuling 于 2008-1-4 15:16 编辑 ]
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
上面说的很清楚了阿
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
能不能举一个例子呀!看了半天,一知半解~哎~
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
比如int, char, varchar之类能够被散列的数据类型就是分区兼容性得,其他类似LOB, LF等类型不能被散列的就不是
对于并置,比如我有两个表A,B,其中A包含列c1 int, c2 char,B包含c1 varchar, c2 int
然后表A按照c1分区,表B按照c2分区,也就是说,当用户插入一行数据到表A,首先会对A.c1进行散列,然后模分区数量,把新的数据插入相应的分区,而对于表B则是对B.c2进行相同算法散列。
这样当查询select * from c1,c2 where A.c1=B.c2的时候,由于A.c1和B.c2的数据类型相同,使用相同的散列算法,如果A.c1与B.c2相等,那么他们肯定在同一分区,这样的话进行join的时候就不需要再分区间移动数据,只需要在本分区join完后向coord partition返回数据
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
认真学习!!
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
谢谢 “wangzhonnew” 分区兼容性,还是不太透彻!!小弟无耻下问啦!!
刚才小弟在网上也看了一些资料~~分区兼容性是不是,接照散列的方式,存储哪些可以兼容的数据呀!~:(
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
就是说
假设函数foo为散列函数,如果type1,type2为相同或不同的数据类型,并且值type1 a等于值type2 b,并且foo(a)=foo(b),当这三者条件满足时可称type1与type2为分区兼容
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
哦,这下子透彻了。谢谢网上的各们大侠“wangzhonnew”:) ~~~~~对了,你说的type1,type2,是不同表里的,还是同一表里面的呀~或者两都行??
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
LS的,我服了you了!
上面说得很清楚了:分区兼容的对象是数据类型,和表没关系的。
回复

使用道具 举报

千问 | 2016-2-2 09:36:33 | 显示全部楼层
知道了~谢谢各位~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行