web-dev-qa-db-ja.com

可変ブロック形式と固定ブロック形式の違いは何ですか?

メインフレームシステムから取得したデータのデータファイル定義ドキュメントでこれらの用語に遭遇しました。

用語集やGoogle検索でこれらの用語の定義を見つけることができませんでした。

これらの用語の正確な意味に誰かが光を当てることはできますか?

21
user1845848

WindowsまたはUnix/Linuxのハードディスク上のデータについて知っていることは忘れてください。

固定長レコード(非ブロックの場合はレコード形式(RECFM)F、ブロックの場合はFBです(固定ブロック標準であるFBSの場合もありますが、単純な使い捨てデータセット(ファイル)の場合はFBと同じです) )データと、既知の変更不可能な量のデータのみを含みます。

それらに含まれるデータは、可能な256ビット値のいずれかです。レコード区切り文字はありません。

可変長レコード(RECFM VまたはVB(VBSは可変ブロックスパンであり、単純なレコードとは別のものです)の前に4バイト(レコード記述子ワード(RDW))が付けられます)最初の2つはレコードの長さを示します。したがって、これらには制御情報とデータが含まれます。レコードの区切り文字はありません(代わりに長さがわかっているため)。

VBデータセットのブロックにも、4バイトのブロック記述子ワード(BDW)が前に付き、最初の2バイトにはブロックの長さが含まれます。

データの書き込みと読み取りはブロック単位でのみ行われ、非ブロック化はioルーチンによって行われます。ブロックサイズが大きいほど、IOSは少なくなります。ただし、最大ブロックサイズはディスク上のトラックのサイズよりも小さいため、最も効率的なブロッキングは、27,998以下の最大1レコードのブロックサイズの「ハーフトラックブロッキング」です。

固定ブロックレコードは、保存されない唯一の情報(ブロックサイズ(BLKSIZE)と最大レコード長(LRECL)が(カタログ、JCL、またはプログラムによって、特にアセンブラーで記述されている場合)提供されるため)オーバーヘッドが少なくなります。データ内。

可変ブロックレコードの場合、データに埋め込まれた2種類の制御情報(BDWとRDW)と、その他の情報があります。

メインフレームのプログラマーは、これについて多くを知る必要はありません。プログラムはレコードを処理し、ブロックの詳細はプログラムの外部にあります。

これがFBブロックです:

DATADATADATADATA

そのブロックがどのように固定長レコードに分解されるかは、データの外部で保持されます。ブロック内の3番目のレコードの位置を計算できます。この事実を利用する低レベルのアクセス方法があります。

VBブロック:

BDWRDWDATARDWDATARDWDATA

ブロック内の3番目のレコードの位置は、ioルーチンによって処理される前のレコードのみが既知です。

不適切なタイプ、不適切なレコード長、または不適切なブロックサイズを選択すると、プログラムのパフォーマンスに大きな影響を与える可能性があります。

データがメインフレームから転送されると、RDW(存在する場合)を削除したり、区切り文字を挿入したり、末尾の空白を削除したりして、データがネイティブファイルのように見えるオプションがあります。メインフレームへの転送は、逆のプロセスを経ます。

メインフレームからデータを受信する、またはメインフレームにデータを送信する場合は、文字形式でのみ行ってください。 「バイナリ」または「パック」フィールドはなく、明示的な符号、明示的な小数点以下の桁数、または倍率を使用します。あなたはあなた自身をそんなに多くのトラブルから救い、監査人の良い本に身を置くでしょう。

40
Bill Woodger