在DB2/Iseries中实现BLOB字段的正确方法是什么?



我们正在在DB2数据库中实现文件上传和存储字段。现在,文件上传列定义为BLOB(5242880),如下:

CREATE TABLE MYLIB.MYTABLE ( 
    REC_ID FOR COLUMN RECID      DECIMAL(10, 0) GENERATED ALWAYS AS IDENTITY ( 
    START WITH 1 INCREMENT BY 1 
    NO MINVALUE NO MAXVALUE 
    NO CYCLE NO ORDER 
    CACHE 20 ) 
    , 
    [other fields snipped]
    FORM_UPLOAD FOR COLUMN F00001 BLOB(5242880) DEFAULT NULL , 
    CONSTRAINT MYLIB.MYCONSTRAINT PRIMARY KEY( REC_ID ) )   
    RCDFMT MYTABLER ; 

这是这样做的正确方法吗?它应该在自己的表格中或定义不同的方式吗?我有点紧张,它将其显示为五兆字节列,而不是像SQL Server一样(例如)(例如)。我们会遇到这样的定义吗?

将斑点存储在DB2列中没有错,但是如果您喜欢存储指针,请查看DataLinks。http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/topic/sqlp/rbafyusoocap.htm

除非您指定分配子句,否则数据本身将存储在表格的"变量长度"溢出"空间中。不是该行的其余的固定长度。

因此,如果您没有分配,并且文件仅为1MB,则仅使用1MB空间存储它,而不是已定义的5MB最大值。

注意,这意味着该系统在访问两个区域的数据时必须进行两倍的I/O。

datalinks具有相同的I/O命中。

从性能的角度来看, - 确保仅在需要时才阅读斑点。 - 如果90%或更多的斑点说<1MB,您可以通过说分配(1048576),同时仍允许存储完整的5MB,从而以空间为代价提高性能。第一个1MB将在溢出中的最后4MB中。

charles

相关内容

  • 没有找到相关文章

最新更新