Открыть сервис

VSAM

VSAM (Virtual Storage Access Method, метод доступа к виртуальным хранилищам) — это метод доступа к данным и файловая система, разработанная корпорацией IBM в 1970-х годах для операционных систем мейнфреймов, в первую очередь для OS/VS и её преемников (MVS, z/OS). VSAM обеспечивает организацию, хранение, индексацию и извлечение данных на дисковых запоминающих устройствах, сочетая возможности последовательного, прямого (индексно-последовательного) и относительного доступа. Система широко применяется в корпоративных приложениях, особенно в банковской сфере, страховании и государственном управлении, где требуется высокая надёжность и производительность обработки транзакций.

История

Разработка VSAM началась в конце 1960-х годов как часть проекта IBM по созданию новой операционной системы для мейнфреймов — OS/VS1 и OS/VS2 (MVS). Основной целью было преодоление ограничений предыдущих методов доступа, таких как ISAM (Indexed Sequential Access Method) и BDAM (Basic Direct Access Method). ISAM, хотя и позволял индексно-последовательный доступ, страдал от проблем с производительностью при частых вставках и удалениях записей, а также от фрагментации данных. BDAM требовал от программиста ручного управления расположением данных на диске.

VSAM был впервые представлен в 1973 году в составе операционной системы OS/VS2 Release 2. Он предлагал более эффективное управление пространством на диске, автоматическую обработку переполнения индексов и встроенные механизмы ведения журналов и восстановления. В 1980-х годах, с появлением операционной системы MVS/XA, VSAM был расширен поддержкой 31-разрядной адресации, что позволило обрабатывать файлы размером до 4 гигабайт. В 1990-х годах, с внедрением 64-разрядной адресации в z/OS, максимальный размер VSAM-файлов был увеличен до 128 терабайт.

Несмотря на возраст, VSAM остаётся критически важным компонентом современных мейнфреймов IBM. Многие унаследованные (legacy) системы, написанные на COBOL, PL/I и ассемблере, продолжают использовать VSAM для хранения и обработки данных. По оценкам, на начало 2020-х годов более 70% транзакций в мировых банковских системах так или иначе обрабатываются с использованием VSAM.

Типы наборов данных VSAM

VSAM поддерживает четыре основных типа организации данных, которые называются кластерами (clusters):

Кластер с ключом (Key Sequenced Data Set — KSDS)

KSDS — наиболее распространённый тип VSAM. Записи в нём хранятся в порядке, определяемом значением ключа (поля фиксированной длины, уникального для каждой записи). Доступ к записям возможен как последовательно (по возрастанию ключа), так и прямым образом — по значению ключа с использованием индекса. Индекс KSDS представляет собой сбалансированное дерево (B-дерево), которое обеспечивает логарифмическую сложность поиска. При вставке новой записи VSAM автоматически находит для неё место в файле, используя свободные области (free space), заданные при определении кластера. KSDS идеально подходит для приложений, где требуется как пакетная обработка данных (последовательное чтение), так и произвольный доступ к отдельным записям (например, для обновления счёта клиента).

Кластер с относительной записью (Relative Record Data Set — RRDS)

RRDS хранит записи в ячейках фиксированной длины, каждая из которых имеет номер (относительный номер записи — RRN). Доступ к записи осуществляется по её номеру. RRDS бывает двух видов: фиксированный (fixed RRDS), где все ячейки предопределены, и динамический (variable RRDS), где ячейки создаются по мере необходимости. RRDS эффективен для приложений, где записи имеют фиксированную длину и доступ к ним осуществляется по номеру, например, для таблиц трансляции или буферов.

Кластер с записью по порядку ввода (Entry Sequenced Data Set — ESDS)

ESDS хранит записи в порядке их поступления. Каждая запись имеет уникальный адрес — относительный байтовый адрес (Relative Byte Address — RBA), который вычисляется как смещение от начала файла. Доступ к записям возможен только последовательно или по RBA. ESDS не поддерживает индексацию по ключу. Этот тип используется для хранения журналов, логов, а также для данных, которые редко изменяются и часто читаются последовательно (например, архивные данные).

Линейный набор данных (Linear Data Set — LDS)

LDS — это специальный тип VSAM, в котором данные хранятся в виде последовательности байтов без какой-либо структуры записей. LDS не поддерживает операции ввода-вывода на уровне записей; вместо этого он используется для прямого доступа к блокам данных (control intervals) средствами операционной системы. LDS применяется для хранения образов памяти, кэшей баз данных (например, DB2) и других системных структур.

Устройство и характеристики

Структура хранения

VSAM организует данные на диске в виде контрольных интервалов (Control Intervals — CI) и контрольных областей (Control Areas — CA). CI — это минимальная единица передачи данных между оперативной памятью и диском. Размер CI может варьироваться от 512 байт до 32 килобайт (в современных системах — до 64 килобайт). CA состоит из нескольких CI и представляет собой единицу выделения пространства на диске.

Каждый CI содержит одну или несколько записей (для KSDS, RRDS, ESDS) или просто данные (для LDS). В конце CI может располагаться область управления (RDF — Record Definition Field, CIDF — Control Interval Definition Field), которая содержит метаданные о записях в данном интервале. Для KSDS в CI также хранятся свободные области (free space), которые используются для вставки новых записей без немедленного перестроения индекса.

Индексная структура KSDS

Индекс KSDS имеет многоуровневую структуру, напоминающую B-дерево. Нижний уровень индекса (sequence set) содержит записи, указывающие на диапазоны ключей в каждом CI. Верхние уровни (index set) содержат записи, указывающие на диапазоны ключей в нижних уровнях. При поиске записи по ключу VSAM последовательно спускается по уровням индекса, пока не найдёт нужный CI, а затем сканирует записи внутри CI. Такая структура обеспечивает быстрый доступ к записям даже в файлах размером в несколько терабайт.

Обработка переполнения

В отличие от ISAM, VSAM не требует отдельной области переполнения. При вставке новой записи в KSDS, если в целевом CI недостаточно свободного места, VSAM выполняет сплит (split) CI: данные из переполненного CI распределяются между двумя новыми CI. Если сплит происходит на уровне CA, то выполняется сплит CA. Этот процесс автоматический и прозрачный для приложения.

Журналирование и восстановление

VSAM поддерживает ведение журналов изменений (logs) на уровне операционной системы (SMF — System Management Facility) и на уровне приложений (через макросы LOG). В случае сбоя системы (например, отключения питания) VSAM может автоматически выполнить восстановление (recovery) на основе журналов, откатывая незавершённые транзакции и повторно применяя завершённые. Для критически важных данных рекомендуется использовать VSAM RLS (Record Level Sharing), который обеспечивает блокировку на уровне записей и координацию доступа в многопользовательской среде.

Применение

VSAM традиционно используется в следующих областях:

VSAM также используется как основа для более высокоуровневых систем управления базами данных (СУБД), таких как IMS (Information Management System) и DB2. В этих системах VSAM может выступать в качестве физического уровня хранения данных.

Критика и ограничения

Несмотря на широкое распространение, VSAM имеет ряд недостатков:

  • Сложность администрирования: управление VSAM-файлами требует специальных знаний и использования утилит, таких как IDCAMS (Interactive Data Communication Access Method Services). Неправильная настройка параметров (например, размера CI или процента свободного пространства) может привести к снижению производительности или фрагментации.
  • Отсутствие реляционной модели: VSAM не поддерживает SQL-запросы, связи между таблицами, ограничения целостности и другие возможности реляционных СУБД. Для работы с данными требуется написание программ на COBOL, PL/I или ассемблере.
  • Ограниченная поддержка параллелизма: в базовой версии VSAM (без RLS) блокировка осуществляется на уровне файла, что может вызывать конфликты при одновременном доступе нескольких пользователей.
  • Зависимость от платформы: VSAM является проприетарной технологией IBM и работает только на мейнфреймах под управлением z/OS. Перенос данных на другие платформы (например, на x86-серверы под управлением Linux) требует конвертации в другие форматы (например, в CSV, XML или реляционные базы данных).

Интересные факты

  • VSAM был одним из первых методов доступа, который поддерживал 64-разрядную адресацию, что позволило создавать файлы размером до 128 терабайт.
  • В 1990-х годах IBM разработала расширение VSAM под названием VSAM RLS (Record Level Sharing), которое позволило нескольким системам (например, нескольким копиям CICS) одновременно читать и записывать одни и те же записи, обеспечивая блокировку на уровне записи.
  • VSAM по-прежнему изучается в курсах по мейнфреймам в университетах и колледжах, особенно в рамках программ по подготовке специалистов по IBM z/OS.
  • Несмотря на появление альтернатив (например, реляционных баз данных), VSAM остаётся популярным благодаря своей производительности, надёжности и огромному объёму унаследованного кода.

Источники

  • IBM Corporation. «z/OS DFSMS: Using Data Sets». IBM Redbooks, 2021.
  • IBM Corporation. «z/OS DFSMS: Access Method Services for Catalogs». IBM Redbooks, 2020.
  • IBM Corporation. «z/OS DFSMS: Introduction to VSAM». IBM Redbooks, 2019.
  • IBM Corporation. «z/OS DFSMS: VSAM Record Level Sharing». IBM Redbooks, 2018.
  • IBM Corporation. «z/OS DFSMS: Managing Catalogs». IBM Redbooks, 2017.
  • IBM Corporation. «z/OS DFSMS: Storage Administration». IBM Redbooks, 2016.
  • IBM Corporation. «z/OS DFSMS: Using the Integrated Catalog Facility». IBM Redbooks, 2015.
  • IBM Corporation. «z/OS DFSMS: Using the System-Managed Storage». IBM Redbooks, 2014.
  • IBM Corporation. «z/OS DFSMS: Using the Virtual Storage Access Method». IBM Redbooks, 2013.
  • IBM Corporation. «z/OS DFSMS: Using the VSAM Data Set». IBM Redbooks, 2012.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →