可变阻塞格式和固定阻塞格式之间有什么区别?

时间:2015-02-20 23:44:22

标签: cobol mainframe jcl

我在数据文件定义文档中遇到过这些关于我从大型机系统获取的数据的术语。

我未能在任何词汇表或Google搜索中找到这些术语的定义 - 仅提及它们。

有人能说清楚这些术语的确切含义吗?

1 个答案:

答案 0 :(得分:40)

忘掉你对Windows或Unix / Linux下硬盘数据的了解。

固定长度记录(可以是未阻止的记录格式(RECFM)F,阻止的FB(它们也可以是FBS,它是固定块标准,但对于简单的一次性数据集(文件),它是等效的到FB)只包含数据,以及已知且不可更改的数据量。

它们包含的数据可以是256位值中的任何一个。没有记录分隔符。

可变长度记录,(RECFM V或VB(VBS是可变阻塞跨区,不是简单记录),前缀为四个字节(记录描述符字(RDW)),前两个字节表示因此它们包含控制信息和数据。没有记录分隔符(因为长度是已知的)。

VB数据集的块也以块描述符字(BDW)为前缀,四个字节,前两个字节包含块的长度。

数据仅以块的形式写入和读取,并通过io例程完成解块。块大小越大,ios越少。但是,由于最大块大小小于磁盘上磁道的大小,因此最有效的阻塞是半磁道阻塞"块大小达到一个小于27,998或等于它的记录。

固定块记录的开销较小,因为提供了唯一的信息(blocksize(BLKSIZE)和最大记录长度(LRECL)(在目录中,或JCL中,或由程序提供,特别是如果用汇编程序编写) ,不存储在数据中。

对于可变块记录,有两种类型的控制信息(BDW和RDW)嵌入数据,以及其他信息。

大型机上的程序员不需要了解这一点。程序将处理记录,阻止细节可以在程序外部。

这是一个FB Block:

DATADATADATADATA

该块如何分解为固定长度的记录保存在数据外部。可以计算块中第三个记录的位置。有一种使用这一事实的低级访问方法。

这是一个VB块:

BDWRDWDATARDWDATARDWDATA

块中第三个记录的位置只知道io例程处理之前的记录。

选择错误的类型,错误的记录长度或错误的块大小会严重影响程序性能。

当数据从大型机传输时,有一些选项可以删除RDW(如果存在),插入分隔符,删除尾随空白等等,以便数据现在看起来像本机文件。转移到大型机会经历相反的过程。

如果您要从大型机接收数据或将数据发送到大型机,请仅以字符格式进行。没有"二进制"或"打包"字段,并使用显式符号,显式小数位或缩放因子。你会给自己省下很多麻烦,让自己在审计师面前。好书。