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

use*_*848 21 cobol mainframe jcl

我在数据文件定义文档中遇到过这些术语,这些术语是我从大型机系统获得的一些数据.

我没有在任何词汇表或谷歌搜索中找到这些术语的定义 - 只是提到它们.

任何人都可以对这些术语的确切含义有所了解吗?

Bil*_*ger 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
Run Code Online (Sandbox Code Playgroud)

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

这是一个VB块:

BDWRDWDATARDWDATARDWDATA
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果要从大型机接收数据或将数据发送到大型机,请仅以字符格式执行此操作.没有"二进制"或"打包"字段,并使用显式符号,显式小数位或缩放因子.你会为自己省下这么多麻烦,让自己成为审计师的好书.