可变分块格式和固定分块格式有啥区别?
Posted
技术标签:
【中文标题】可变分块格式和固定分块格式有啥区别?【英文标题】:What is the difference between a variable-blocked format and a fixed-blocked format?可变分块格式和固定分块格式有什么区别? 【发布时间】:2015-02-20 23:44:22 【问题描述】:我在从大型机系统获取的一些数据的数据文件定义文档中遇到了这些术语。
我在任何词汇表或 Google 搜索中都找不到这些术语的定义 - 只是提及它们。
谁能解释一下这些术语的确切含义?
【问题讨论】:
查看账单答案;这个答案对VB的二进制实现有点:***.com/questions/21977135/… 有人能解释一下今天突然投票的原因吗? @BillWoodger 您的答案已链接到黑客新闻的评论部分:news.ycombinator.com/item?id=14084339 @bkjvbx 谢谢,那是个谜???? 【参考方案1】:忘记您对 Windows 或 Unix/Linux 下硬盘上数据的了解。
固定长度记录(可以是记录格式 (RECFM) F 表示未阻塞,FB 表示阻塞(它们也可以是 FBS,它是固定块标准,但对于简单的一次性数据集(文件)它是等价的到 FB) 只包含数据,以及已知且不可更改的数据量。
它们包含的数据可以是任何可能的 256 位值。没有记录分隔符。
可变长度记录,(RECFM V 或 VB(VBS 是 Varible Blocked Spanned,它不是简单记录)以四个字节(记录描述符字 (RDW))为前缀,其中前两个表示记录的长度。因此它们包含控制信息和数据。没有记录分隔符(因为长度是已知的)。
VB 数据集的块也以块描述符字 (BDW) 为前缀,四个字节,前两个包含块的长度。
数据仅在块中写入和读取,由 io 例程完成解块。块大小越大,ios越少。但是,由于最大块大小小于磁盘上磁道的大小,因此最有效的阻塞是“半磁道阻塞”,其中一个记录的块大小不超过 27,998 或等于它。
固定块记录的开销较小,因为提供了唯一的信息(块大小(BLKSIZE)和最大记录长度(LRECL)(在目录中,或JCL,或由程序,特别是如果用汇编程序编写) ,不存储在数据中。
对于可变块记录,有两种类型的控制信息(BDW 和 RDW)嵌入到数据中,以及其他信息。
大型机上的程序员不需要对此了解太多。程序会处理记录,阻塞细节可以在程序外部。
这是一个 FB 块:
DATADATADATADATA
该块如何分解为固定长度的记录是在数据外部保存的。可以计算块中第三条记录的位置。有一种低级访问方法使用了这个事实。
这是一个 VB 块:
BDWRDWDATARDWDATARDWDATA
块中第三条记录的位置只有在它之前已经被io例程处理过的记录才知道。
选择错误的类型、错误的记录长度或错误的块大小会显着影响程序性能。
从大型机传输数据时,可以选择删除 RDW(如果存在)、插入分隔符、删除尾随空格等,以便数据现在看起来像本机文件。转移到大型机会经历相反的过程。
如果您要从大型机接收数据或向大型机发送数据,请仅以字符格式进行。没有“二进制”或“压缩”字段,并使用明确的符号、明确的小数位或比例因子。您将为自己省去很多麻烦,并让自己成为审计师的好书。
【讨论】:
以上是关于可变分块格式和固定分块格式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
合并以 XXXXX.csv.gz_1_2.tar 和 XXXXX.csv.gz_2_2.tar 格式分块的两个文件(使用 python 或 pyspark)