z/OS 上 DB2 v9 上的 BLOB

ILX*_*ILX 5 db2

在 z/OS 上的 DB2 v9(或更高版本)上使用 BLOB 的优缺点是什么?

澄清:是否有一些限制(例如对重组、HA 的影响)?

我们想存储大量文件:在长达 6 个月的时间内存储 1000 万个文件。大多数文件应该在 20k 到 100k 之间,但可能有例外(文件大于 1MB)。大多数文件应该是 XML,但其中一些可能包含数字签名或其他二进制数据。

bha*_*mby 2

LOB在 DB2 中使用大对象时需要记住一些事情。

首先,当您创建LOB列时,该列仅保存相关 的信息LOB,而不保存 的数据LOB。您创建LOB列的表(基表)必须ROWID在其上创建一个列,该列将用于定位数据LOB。如果您没有显式创建ROWID列,DB2 将为ROWID您创建一个隐藏列。如果您要向现有表添加列并且想要使用显式ROWID列,那么您应该ROWIDLOB. 否则,当您创建 时LOB,DB2 将创建隐式ROWID,然后您第二次ALTER添加时ROWID将创建第二ROWID列。DB2 将确保这两列始终相同,但它会占用空间。:-)

其次,对于LOB在表上创建的每一列,必须定义一个单独的LOB表空间(有时称为辅助表空间)。因此,如果您计划LOB在表上有 3 列,则必须创建 3 个LOB表空间来存储大型对象。这些表空间必须与关联的基表位于同一数据库中。

另外,如果您的基表已分区,那么您必须为每个分区的每个 LOB 列创建一个空间LOB一个辅助表。

具有单个LOB分区的单个表空间最多可以包含 16TB 的LOB数据。

第三,每个辅助表必须定义一个索引。

下面是创建辅助表的示例(任何以 开头的内容YOUR_都应替换为正确的值):

CREATE LOB TABLESPACE YOUR_LOB_TABLESPACE
  IN YOUR_DATABASE
  LOG NO;
COMMIT;
CREATE AUXILIARY TABLE YOUR_AUX_TABLE
  IN YOUR_DATABASE.YOUR_LOB_TABLESPACE
  STORES YOUR_BASE_TABLE
  COLUMN YOUR_LOB;
CREATE UNIQUE INDEX XYOUR_LOB
  ON YOUR_AUX_TABLE;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

最后,当您加载数据时,如果列和基表行的总长度LOB小于32KB,您可以使用该LOAD实用程序将数据放入。否则,您必须使用 SQL 语句,例如INSERTMERGE

IBM 对 LOB 表空间中的页面大小有一些建议。 LOB 表空间中每页只能存储一个LOB,因此您需要进行一些计算,以根据要存储的文件的平均大小最大限度地减少磁盘空间损失。例如,如果您的 LOB 平均大小为 17KB,则您需要使用 4KB 页面空间。您将使用 5 个页面(20KB),与 8KB 页面(24 - 17)的 7KB 或 16 或 32 KB 页面大小的 15KB 相比,这只会浪费 3KB 的磁盘空间。

与使用 LOB 相比,使用 LOB 的优点之一VARCHAR (FOR BIT DATA)是,由于数据存储在单独的表空间中,因此针对基表的表空间扫描会快得多。

参考文献: 1 , 2


说了这么多,如果您计划将大部分数据设为 XML,那么我可能会提到有一个实际的XML 数据类型(并且内置于 XML 解析引擎中,称为pureXML)。

您可以在线查看有关在 DB2 中使用 XML 的完整指南(以 PDF 形式)。