LOB DATA

   DB2z的一个I/O单元是一个page(数据页),一个page的大小取决于bp的大小,通常可以是4K,8K,16K和32K,所以一条record最长不能超过32K,显然这个不符合现在的应用,某些数据,比如说文档,图片,影音什么的通常非常大,常规的page就存不下,因此DB2引入了数据类型是LOB的column,来存放LOB DATA。

     那么DB2是如何实现对LOB DATA的访问呢,要搞清楚这个问题,就要搞清楚LOB的设计原理。相对于LOB DATA,其它的数据类型的COLUMN都是存放在base table上的,LOB DATA是存放在定义在LOB TS的AUX TB里,另外还需要为AUX TB建一个AUX INDEX, 这样BASE TS(TB)就和LOB TS(AUX TB)通过AUX IX建立了联系。下面介绍下BASE TS/TB,LOB TS, AUX TB和AUX IX的结构,就知道怎么访问LOB DATA了。

     BASE TS:就是普通的TS,只不过建在它上面的TB包含了LOB COLUMN

    BASE TB:也是普通的TB,在创建LOB column的时候,要显示/隐式 一个ROWID column,另外对于LOB column,DB2z会自动创建4个字节的lob indicator,其中最后两个字节表示的是LOB VERSION。

    LOB TS:里面的AUX TB存的是LOB DATA,因此这种TS和普通的TS是有区别的,定义的时候要写上LOB关键字,除了普通TS有的一些PAGE之外,LOB TS有high-level space map page,low level space map page, LOB map page和LOB data page,通过这种架构存储LOB data。LOB MAP page里面有17个字节的ROWID信息,通过ROWID和AUX INDEX ENTRY建立联系

    AUX TB:建在LOB TS里的TB。

    AUX IX:建在AUX TB里的index, key是取自LOB TS 17个字节的ROWID+2个字节的version信息+ RID指向lobmap page里的id-map,这样一方面就建立和LOB TS的联系,另一方面index key也是base ts里ROWID pad过后17个字节ROWID+lob indicator后两个字节的lob version,这样又建立和BASE TS的联系。

LOB DATA_第1张图片

     所以通过BASE TS的ROWID+VERSION找到对应的index entry,再通过index entry里的RID找到对应的LOB DATA。

     ROWID + VERSION 的信息在这些对象里必须一致,否则就会出现AUX IX和LOB DATA/BASE DATA不匹配的问题。           .                                      

                                                         

你可能感兴趣的:(DB2)