在 z/OS 上的 DB2 v9(或更高版本)上使用 BLOB 有什么优缺点?
澄清:是否有一些限制(如对重组、HA 的影响)?
我们想存储大量文件:在长达 6 个月的时间内存储 1000 万个文件。大多数文件应该在 20k 到 100k 之间,但也可能有例外(大于 1MB 的文件)。大多数文件应该是 XML,但其中一些可能包含数字签名或其他二进制数据。
在 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_
都应该替换为正确的值):最后,在加载数据时,如果
LOB
列和基表行的总长度小于 32KB,则可以使用该LOAD
实用程序将数据放入。否则,您必须使用 SQL 语句,例如INSERT
orMERGE
。IBM 对 LOB 表空间中的页面大小有一些建议。 LOB 表空间中的每页只能
LOB
存储一个,因此您需要根据所存储文件的平均大小进行一些数学运算,以最大限度地减少丢失的磁盘空间。例如,如果您有一个平均大小为 17KB 的 LOB,您可能希望使用 4KB 的页面空间。您将使用 5 个页面(20KB),与 7KB 的 8KB 页面 (24 - 17) 或 15KB 的 16 或 32 KB 页面大小相比,这只会浪费 3KB 的磁盘空间。使用 LOB 的一个优点
VARCHAR (FOR BIT DATA)
是,由于数据存储在单独的表空间中,因此针对基表的表空间扫描会快得多。参考文献: 1 , 2
说了这么多,如果您计划大部分数据是 XML,那么我可能会提到有一个实际的XML 数据类型(并内置 XML 解析引擎,称为pureXML)。
您可以在线(和以 PDF 格式)查看有关在 DB2 中使用 XML 的完整指南。