Ответ 1
Забудьте о том, что вы знаете о данных на жестком диске под Windows или Unix/Linux.
Записи фиксированной длины (которые могут быть записаны в формате записи (RECFM) F для разблокированных, FB для заблокированных (они также могут быть FBS, который является фиксированным стандартом блока, но для простого одноразового набора данных (файла) он эквивалентен к FB) просто содержат данные и известный и неизменный объем данных.
Данные, которые они содержат, могут любыми 256 битными значениями. Нет разделителей записей.
Записи с переменной длиной (RECFM V или VB (VBS Varible Blocked Spanned, что является чем-то большим, чем простая запись) имеют префикс с четырьмя байтами (Word дескриптора записи (RDW)), первые два из которых указывают на длина записи, поэтому они содержат управляющую информацию и данные. Нет разделителей записей (потому что длина известна вместо этого).
Блоки для набора данных VB также предваряются блочным дескрипторным словом (BDW), четыре байта, первые два из которых содержат длину блока.
Данные записываются и считываются только в блоках, причем деблокирование выполняется с помощью io-процедур. Чем больше размер блока, тем меньше ios. Однако, поскольку максимальный размер блока меньше, чем размер дорожки на диске, наиболее эффективной блокировкой является "блокировка с половинной дорожкой" с размером блока до одной записи менее 27 998 или равной ему.
У записей фиксированного блока меньше накладных расходов, поскольку предоставляется только информация (блокировка (BLKSIZE) и максимальная длина записи (LRECL) (в каталоге или JCL или программе, особенно если она написана в Assembler), не сохраняются в данных.
Для записей с переменным блоком имеются два типа управляющей информации (BDW и RDW), встроенные в данные, а также другая информация.
Программисту на Mainframe не нужно много знать об этом. Программа будет обрабатывать записи, данные блокировки могут быть внешними по отношению к программе.
Здесь FB Block:
DATADATADATADATA
Как этот блок разбивается на записи фиксированной длины, хранится снаружи данных. Можно вычислить положение третьей записи в блоке. Существует низкоуровневый метод доступа, который использует этот факт.
Здесь находится блок VB:
BDWRDWDATARDWDATARDWDATA
Положение третьей записи в блоке известно только тем, что записи до того, как они были обработаны io-процедурами.
Выбор неправильного типа или неправильная длина записи или неправильный размер блока могут существенно повлиять на производительность программы.
Когда данные передаются с мейнфрейма, есть опции для удаления RDW (если есть), вставки разделителей, отбрасывание завершающих пробелов и тому подобное, так что данные теперь выглядят как родной файл. Передача на Mainframe проходит через обратный процесс.
Если вы собираетесь получать данные с мейнфрейма или отправлять данные в мейнфрейм, сделайте это только в формате символов. Нет "двоичных" или "упакованных" полей, а также использовать явные знаки, явные десятичные знаки или коэффициенты масштабирования. Вы сэкономите себе столько хлопот и будьте в хороших книгах аудиторов.