DL/1
DL/1 — это иерархическая система управления базами данных (СУБД), разработанная корпорацией IBM в 1960-х годах. DL/1 (Data Language/1) является языком манипулирования данными и частью информационной системы управления (IMS — Information Management System), одной из первых коммерческих СУБД. DL/1 реализует иерархическую модель данных, в которой информация организуется в виде древовидных структур, состоящих из сегментов (записей), связанных отношениями «родитель-потомок». Система получила широкое распространение в мейнфреймовых средах, особенно в банковской сфере, страховании, государственных учреждениях и других областях, где требовалась высокая надёжность, производительность и обработка транзакций в реальном времени.
История
Разработка IMS и DL/1 началась в середине 1960-х годов в рамках совместного проекта IBM и компании Rockwell International для программы «Аполлон» (NASA). Целью было создание системы управления данными, способной обрабатывать огромные объёмы информации о деталях космического корабля и обеспечивать надёжное хранение в условиях жёстких требований к времени отклика. Первая версия IMS была выпущена в 1968 году. DL/1 стал основным языком для доступа к данным в этой системе.
В 1970-х и 1980-х годах IMS/DL/1 стала одной из доминирующих СУБД на мейнфреймах IBM, конкурируя с системами на основе сетевой модели (например, IDMS) и реляционной модели (например, DB2). Несмотря на появление реляционных баз данных, IMS/DL/1 продолжала использоваться из-за своей высокой производительности, предсказуемости и зрелости. Многие крупные организации, такие как банки, авиакомпании и страховые компании, десятилетиями эксплуатировали системы на основе DL/1, и миграция на новые платформы была связана с огромными затратами и рисками.
В 1990-х и 2000-х годах IBM выпустила несколько новых версий IMS, добавив поддержку SQL, Java и веб-сервисов, но ядро DL/1 осталось неизменным. По состоянию на 2020-е годы IMS/DL/1 продолжает использоваться в критически важных приложениях, особенно в финансовом секторе, и поддерживается IBM в рамках мейнфреймовой платформы z/OS.
Архитектура и модель данных
DL/1 реализует иерархическую модель данных. Данные организуются в виде иерархических структур, называемых сегментами. Каждый сегмент представляет собой запись, состоящую из полей. Сегменты связаны между собой отношениями «родитель-потомок»: один родительский сегмент может иметь несколько дочерних, но каждый дочерний имеет ровно одного родителя. Совокупность сегментов, связанных таким образом, образует иерархическую базу данных (или иерархическую структуру).
Основные понятия
- Сегмент (Segment): Наименьшая единица данных, к которой можно обратиться. Каждый сегмент имеет уникальное имя и набор полей. Например, сегмент «Сотрудник» может содержать поля «Имя», «Фамилия», «Отдел».
- Поле (Field): Атомарный элемент данных внутри сегмента. Поля могут быть ключевыми (используются для поиска) и неключевыми.
- Иерархия (Hierarchy): Древовидная структура, определяющая отношения между сегментами. Корневой сегмент (самый верхний) не имеет родителя. Глубина иерархии может быть различной.
- База данных (Database): Совокупность всех экземпляров сегментов, организованных в соответствии с определённой иерархией. Каждая база данных имеет уникальное имя.
- Тип сегмента (Segment Type): Описание структуры сегмента (набор полей, длина, тип данных). Экземпляры сегментов одного типа хранятся вместе.
- Физическая база данных (Physical Database — PDB): Реализация иерархической структуры на физическом носителе. Может быть одной или несколькими.
- Логическая база данных (Logical Database — LDB): Представление данных, которое может объединять данные из нескольких физических баз данных или предоставлять альтернативную иерархию. Используется для упрощения доступа.
Пример иерархии
Рассмотрим базу данных для отдела кадров:
- Корневой сегмент: Отдел (поля: Номер отдела, Название отдела)
- Дочерний сегмент 1: Сотрудник (поля: Табельный номер, Имя, Фамилия, Должность)
- Дочерний сегмент 1.1: Проект (поля: Код проекта, Название проекта, Дата начала)
- Дочерний сегмент 2: Оборудование (поля: Инвентарный номер, Тип, Дата покупки)
В этой иерархии каждый отдел может иметь несколько сотрудников и несколько единиц оборудования. Каждый сотрудник может участвовать в нескольких проектах. Проект не может существовать без сотрудника, а сотрудник — без отдела.
Язык манипулирования данными DL/1
DL/1 предоставляет набор команд для доступа к данным в иерархической базе. Эти команды выполняются в программах, написанных на языках COBOL, PL/I, Assembler или C. Основные операции:
- GET UNIQUE (GU): Получение первого сегмента, удовлетворяющего заданным условиям. Используется для прямого доступа по ключу.
- GET NEXT (GN): Получение следующего сегмента в иерархическом порядке обхода (сверху вниз, слева направо). Используется для последовательного просмотра.
- GET NEXT WITHIN PARENT (GNP): Получение следующего сегмента в пределах текущего родительского сегмента. Позволяет перебирать дочерние сегменты одного родителя.
- GET HOLD (GHU, GHN, GHNP): Аналогичны GU, GN, GNP, но с захватом сегмента для последующего обновления или удаления.
- INSERT (ISRT): Вставка нового сегмента в базу данных. Сегмент вставляется в определённую позицию в иерархии.
- REPLACE (REPL): Замена полей существующего сегмента (после GET HOLD).
- DELETE (DLET): Удаление сегмента и всех его потомков (после GET HOLD).
Пример программы на COBOL (псевдокод)
``cobol PROCEDURE DIVISION. MOVE '101' TO EMP-ID. CALL 'CBLTDLI' USING GU, PCB, EMP-SEGMENT, EMP-KEY. IF STATUS-CODE = ' ' DISPLAY 'Сотрудник найден: ' EMP-NAME ELSE DISPLAY 'Сотрудник не найден'. ``
Здесь CBLTDLI — это интерфейс вызова DL/1 из COBOL. GU — команда GET UNIQUE. PCB — блок управления программой (Program Communication Block), который описывает структуру базы данных.
Физическая организация данных
DL/1 использует несколько методов организации данных на диске, которые выбираются при определении базы данных:
- HSAM (Hierarchical Sequential Access Method): Данные хранятся последовательно. Подходит для архивных данных, где доступ только последовательный.
- HISAM (Hierarchical Indexed Sequential Access Method): Комбинация индекса и последовательного хранения. Обеспечивает быстрый доступ по ключу корневого сегмента и последовательный просмотр.
- HDAM (Hierarchical Direct Access Method): Использует хеш-таблицу для прямого доступа к корневому сегменту. Обеспечивает самый быстрый доступ, но требует тщательного проектирования.
- HIDAM (Hierarchical Indexed Direct Access Method): Использует индекс для доступа к корневому сегменту, а затем прямые указатели для доступа к дочерним. Сочетает скорость индекса с гибкостью прямых ссылок.
Выбор метода зависит от характера нагрузки: для транзакционных систем с частыми запросами по ключу чаще используется HDAM или HIDAM, для пакетной обработки — HISAM или HSAM.
Преимущества и недостатки
Преимущества
- Высокая производительность: Для запросов, соответствующих иерархической структуре, DL/1 обеспечивает очень быстрое время отклика, особенно при прямом доступе по ключу.
- Предсказуемость: Благодаря фиксированной структуре и методам доступа, время выполнения запросов легко оценить.
- Надёжность: IMS/DL/1 имеет многолетнюю историю эксплуатации в критически важных системах, где сбои недопустимы.
- Поддержка транзакций: IMS обеспечивает ACID-свойства (атомарность, согласованность, изолированность, долговечность) для транзакций.
- Масштабируемость: Системы на основе DL/1 могут обрабатывать огромные объёмы данных и тысячи транзакций в секунду.
Недостатки
- Жёсткая структура: Иерархическая модель плохо подходит для сложных связей «многие ко многим». Для их реализации требуются избыточные данные или логические базы данных.
- Сложность разработки: Программирование на DL/1 требует глубокого понимания физической структуры данных и навигации по иерархии. Изменение структуры базы данных может потребовать переписывания всех программ, которые к ней обращаются.
- Отсутствие стандартного SQL: До появления поддержки SQL в IMS, все запросы писались на процедурном языке DL/1, что увеличивало время разработки.
- Ограниченная гибкость: Добавление нового типа сегмента в середину иерархии или изменение связей между сегментами — сложная операция.
Применение
DL/1 использовался и продолжает использоваться в следующих областях:
- Банковское дело: Обработка транзакций, управление счетами, кредитные системы.
- Страхование: Управление полисами, обработка претензий.
- Государственные учреждения: Системы социального обеспечения, налогообложения.
- Авиаперевозки: Системы бронирования билетов.
- Телекоммуникации: Управление абонентами и тарификацией.
Критика и альтернативы
С появлением реляционных баз данных (например, DB2, Oracle) иерархические системы, такие как DL/1, подверглись критике за жёсткость и сложность. Реляционная модель предлагает более гибкий способ представления данных и более простой язык запросов (SQL). Однако для высоконагруженных транзакционных систем с чётко определённой иерархией DL/1 часто оставался более производительным. Альтернативами являются:
- Реляционные СУБД (RDBMS): DB2, Oracle, Microsoft SQL Server. Более гибкие, но могут быть медленнее для определённых типов запросов.
- NoSQL-системы: Например, иерархические базы данных, такие как XML-базы данных или графовые базы данных, которые также могут моделировать иерархии.
- IMS с поддержкой SQL: Современные версии IMS позволяют использовать SQL для доступа к данным, что упрощает интеграцию с новыми приложениями.
Интересные факты
- DL/1 является одной из старейших коммерческих СУБД, которая всё ещё активно используется.
- Система IMS/DL/1 обрабатывает более 50 миллиардов транзакций в день по всему миру (по данным IBM на 2010-е годы).
- Многие крупные банки до сих пор используют COBOL-программы, работающие с DL/1, которые были написаны в 1970-х годах.
Источники
- IBM IMS Library: IMS/ESA Application Programming: DL/I Calls.
- IBM Redbooks: IMS Primer.
- "An Introduction to Database Systems" by C.J. Date.
- "IMS: A Guide to IMS/VS and DL/I" by David J. S. Taylor.
- Документация IBM z/OS IMS Version 14 (2019).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →