在 z/OS 上的 DB2 v9(或更高版本)上使用 BLOB 的优缺点是什么?
澄清:是否有一些限制(例如对重组、HA 的影响)?
我们想存储大量文件:在长达 6 个月的时间内存储 1000 万个文件。大多数文件应该在 20k 到 100k 之间,但可能有例外(文件大于 1MB)。大多数文件应该是 XML,但其中一些可能包含数字签名或其他二进制数据。
LOB
在 DB2 中使用大对象时需要记住一些事情。
首先,当您创建LOB
列时,该列仅保存相关 的信息LOB
,而不保存 的数据LOB
。您创建LOB
列的表(基表)必须ROWID
在其上创建一个列,该列将用于定位数据LOB
。如果您没有显式创建ROWID
列,DB2 将为ROWID
您创建一个隐藏列。如果您要向现有表添加列并且想要使用显式ROWID
列,那么您应该ROWID
在LOB
. 否则,当您创建 时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 语句,例如INSERT
或MERGE
。
IBM 对 LOB 表空间中的页面大小有一些建议。 LOB 表空间中每页只能存储一个LOB
,因此您需要进行一些计算,以根据要存储的文件的平均大小最大限度地减少磁盘空间损失。例如,如果您的 LOB 平均大小为 17KB,则您需要使用 4KB 页面空间。您将使用 5 个页面(20KB),与 8KB 页面(24 - 17)的 7KB 或 16 或 32 KB 页面大小的 15KB 相比,这只会浪费 3KB 的磁盘空间。
与使用 LOB 相比,使用 LOB 的优点之一VARCHAR (FOR BIT DATA)
是,由于数据存储在单独的表空间中,因此针对基表的表空间扫描会快得多。
说了这么多,如果您计划将大部分数据设为 XML,那么我可能会提到有一个实际的XML 数据类型(并且内置于 XML 解析引擎中,称为pureXML)。
您可以在线查看有关在 DB2 中使用 XML 的完整指南(以 PDF 形式)。
归档时间: |
|
查看次数: |
4288 次 |
最近记录: |