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

24

我在从Mainframe系统获取的数据文件定义文档中遇到了这些术语。

我无法在任何词汇表或Google搜索中找到这些术语的定义-只有它们的提及。

有人能否解释一下这些术语的确切含义?


请查看Bill的答案;这个答案涉及VB的二进制实现:http://stackoverflow.com/questions/21977135/connect-direct-file-sending-from-mainframe-to-unix/22005492#22005492 - Bruce Martin
有人可以解释一下今天这个突然的投票吗? - Bill Woodger
1
@BillWoodger 您的回答已经在Hacker News的评论部分中链接:https://news.ycombinator.com/item?id=14084339 - bkjvbx
@bkjvbx 谢谢,那真是个谜。 - Bill Woodger
1个回答

44

忘记你对于在Windows或Unix/Linux下硬盘上的数据所了解的一切。

固定长度记录(可以是未阻塞的记录格式(RECFM)F,也可以是已阻塞的FB(它们也可以是Fixed Block Standard (FBS),但对于简单的单次使用数据集(文件),它等同于FB),只包含数据和一个已知且不可更改的数据量。

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

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

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

数据仅以块形式写入和读取,并由io例程进行去块处理。块大小越大,io次数越少。但是,由于最大块大小小于磁盘上一轨道的大小,因此最有效的分块方式是“半轨道分块”,块大小为27,998以下或等于它的一条记录。

固定块记录具有较少的开销,因为只提供信息(块大小(BLKSIZE)和最大记录长度(LRECL)(在目录、JCL或程序中特别是汇编程序中)),而不存储在数据中。

对于可变块记录,除了其他信息外,还嵌入了两种类型的控制信息(BDW和RDW)与数据一起。

Mainframe上的程序员不需要太多了解这个。程序会处理记录,分块细节可以是程序外部的。

下面是一个FB块:

DATADATADATADATA

这个块如何分解为固定长度的记录是由数据之外的部分来维护的。第三条记录在块中的位置可以被计算出来。有一种低级访问方法可以利用这个事实。

这里有一个VB块:

BDWRDWDATARDWDATARDWDATA

只有在 I/O 例程处理之前的记录已知时,才能确定块中第三个记录的位置。

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

当从主机传输数据时,可以选择取消 RDW(如果有),插入分隔符,删除尾随空格等选项,以使数据看起来像本地文件。传输到主机则经过相反的过程。

如果您要从主机接收数据或向主机发送数据,请只使用字符格式。没有"二进制"或"压缩"字段,并使用显式符号、显式小数位或比例因子。这样可以避免很多麻烦,并使您自己受到审计人员的好评。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接