如何将可变长度记录的长度增加到 32760 以上?
Posted
技术标签:
【中文标题】如何将可变长度记录的长度增加到 32760 以上?【英文标题】:How can I increase the length of variable-length record beyond 32760? 【发布时间】:2015-08-14 08:28:23 【问题描述】:可变长度 QSAM 记录的最大记录长度为 32,760 字节。
我们文件的当前记录长度对我们来说是可以的,但为了处理更多信息,我们必须扩展此文件,使其长度超过 32K (LRECL
> 32760)。
拆分记录对我们来说不是一个好的选择,因为它会影响我们现有的系统。
我不确定在这里使用带有 VSAM 的 SPANNED
记录是否可以解决这个问题。
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
DEFINE CLUSTER (NAME(dsname.K1719) INDEXED VOLUMES(xxxxxx) -
TRACKS(1) KEYS(17 19) RECORDSIZE(40 110) SPANNED) -
DATA (NAME(dsname.K1719.DATA)) INDEX (NAME(dsname.K1719.INDEX))
/*
//
这会解决我们的问题吗?
【问题讨论】:
我假设最大块长度为 32k,而不是最大文件(或数据集)长度为 32k;你也试过看看会发生什么??? 这是愚蠢的(因为浪费了 DASD 超过 27998 块大小。有人为这个错误付出了代价,大概不是你。是的,VSAM 中的 SPANNED 将允许你一些相当大的记录。当然,额外的 CPU、额外的 IO (EXCPS) 和额外的存储会产生开销。所有成本。取决于你使用它的糟糕程度,以及你使用它的方式,可能会更长的运行时间。嘿,如果你觉得这是一种简单的方法,客户不介意为您最初糟糕的设计支付更多的费用,日复一日,然后去做吧。 最初的“设计”把你挖成了一个大整体。你可以侧身一点,但不修好设计就出不来。最容易做的事情是继续挖掘,并希望客户不介意增加成本,然后发现他们一直在支付的费用。显然我不建议这样做。 我同意比尔的观点,您需要查看文件的设计。如果涉及到很多程序,您就会发现为什么拥有一个访问复杂文件的“文件驱动程序”程序通常是个好主意,即应用程序-->文件-驱动程序-程序- ->文件。 @BillWoodger 思想大同小异,傻瓜永远不会不同;任你选 【参考方案1】:如果您使用 Unix 系统服务文件,则不受 LRECL 的 32K 限制。 有个下游效应。
如果您使用 COBOL 处理文件,您可以使用 LINE ORGANIZATION 子句中的 SEQUENTIAL,但随后您被限制为 1M LRECL。 如果您使用 COBOL 处理文件,则可以避开 COBOL I/O 并使用 Cfopen()
等等来绕过 1M LRECL
上面提到的限制,但是你添加了一些东西
对于公认的假设 COBOL 应用程序来说是陌生的。 C 会
这些文件没有问题,我无法与 PL/I 交谈。
并非所有 DFSMS 和第三方实用程序都完全了解 Unix 系统服务
文件。
Unix 系统服务文件的 JCL 结构相对较短
学习曲线,但需要一点学习。
Unix 系统服务文件的安全性可能会让您感到反感
安全管理员。您可能会发现自己必须设置
通过setfacl
和其他新概念访问控制列表。
【讨论】:
这很有创意。希望它会激发 OP 回答他们提出的问题。【参考方案2】:@cschneid 的回答很有趣。
如果不了解有关文件/应用程序的更多信息,很难给出具体答案。以下是可能有用的想法。
你可以:
将字帖分成几个子记录 向密钥添加一个额外的字节所以而不是拥有
<key><a record>
你会的
<key><sub-key-1><part-1-of-record>
<key><sub-key-2><part-2-of-record>
<key><sub-key-3><part-3-of-record>
...
如果您有一个与文件交互的文件驱动程序程序, 您可以从应用程序中隐藏数据存储方式的详细信息。因此,您可以为每个逻辑记录拥有多个物理记录,并且您的应用程序不需要知道它。如果需要,您也可以拥有多个文件
请记住,您可以在不需要存储在文件中的新字帖末尾添加空格。当您需要向文件中添加字段时,这会派上用场 - 可以节省重新编译大量程序
文件是否包含逻辑上不同的数据(例如 sales 和 orders 等),访问该文件的 每个程序 是否使用 整个记录???
如果是这样,您可以在 File-Driver-Program 的调用中添加请求类型:
Call "FilePgm" using GET-ORDER Order-Copybook
or
Call "FilePgm" using GET-SALES Sales-Copybook
or
Call "FilePgm" using GET-EVERYTHING Everything-Copybook
拥有多个调用类型/副本的好处是,如果订单副本更改,仅使用销售副本不需要的程序需要重新编译,反之亦然。这将使将来更容易更改文件。
终于有Database Option !!!,要么一个
完全重写
或使用二进制blob。这些二进制 blob 的限制为 2gb
对于 DB2,您可以使用非常有用的 压缩。大型记录通常具有高压缩比。压缩的好处不是节省空间,而是减少了 IO。
【讨论】:
以上是关于如何将可变长度记录的长度增加到 32760 以上?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用可变长度类型将包含多个 std::vector<float> 的结构写出到 HDF5?