我们正在在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