可变分块格式和固定分块格式有什么区别?

What is the difference between a variable-blocked format and a fixed-blocked format?

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

我在任何词汇表或 Google 搜索中都找不到这些术语的定义 - 只是提到了它们。

谁能阐明这些术语的确切含义?

忘记您对 Windows 或 Unix/Linux 下硬盘上数据的了解。

定长记录(可以是Record Format (RECFM) F表示unblocked,FB表示blocked(也可以是FBS,Fixed Block Standard,但是对于一个简单的一次性数据集(文件)它相当于一个FB)只包含数据,以及已知且不可更改的数据量。

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

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

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

数据仅按块写入和读取,由 io 例程完成解块。 blocksize越大,ios越少。但是,因为最大块大小小于磁盘上磁道的大小,所以最有效的分块是 "half-track blocking",块大小最多为一条记录小于 27,998 或等于它。

固定块记录的开销较小,因为只提供了信息(块大小(BLKSIZE)和最大记录长度(LRECL)(在目录中,或 JCL 中,或由程序提供,尤其是在编写时汇编程序),不存储在数据中。

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

Mainframe 上的程序员不需要了解太多。一个程序会处理记录,阻塞细节可以在程序外部。

这是一个 FB 块:

DATADATADATADATA

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

这是一个 VB 块:

BDWRDWDATARDWDATARDWDATA

块中第三条记录的位置只有在它之前被io例程处理过的记录才知道。

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

当数据从大型机传输出去时,可以选择删除 RDW(如果存在)、插入定界符、删除尾随空白等等,这样数据现在看起来就像一个本地文件。转移到主机执行相反的过程。

如果您要从大型机接收数据或向大型机发送数据,请仅以字符格式进行。没有 "binary" 或 "packed" 字段,并使用明确的符号、明确的小数位或比例因子。你会省去很多麻烦,让自己成为审计员的好书。