Метод индексированного последовательного доступа ( ISAM ) — это метод создания, обслуживания и манипулирования компьютерными файлами данных, позволяющий извлекать записи последовательно или случайным образом по одному или нескольким ключам. Индексы ключевых полей поддерживаются для быстрого извлечения требуемых записей файлов в индексированных файлах . Первоначально IBM разработала ISAM для мэйнфреймов , но его реализации доступны для большинства компьютерных систем.
Термин ISAM используется для нескольких связанных понятий:
В системе ISAM данные организованы в записи , которые состоят из полей фиксированной длины, изначально хранящихся последовательно в ключевой последовательности. Вторичные наборы записей, известные как индексы , содержат указатели на местоположение каждой записи, что позволяет извлекать отдельные записи без необходимости поиска по всему набору данных. Это отличается от современных навигационных баз данных , в которых указатели на другие записи хранились внутри самих записей. Ключевым улучшением в ISAM является то, что индексы небольшие и их можно быстро искать, возможно, полностью в памяти, тем самым позволяя базе данных получать доступ только к тем записям, которые ей нужны. Дополнительные изменения данных не требуют изменений других данных, только таблицы и индексов, о которых идет речь.
При создании файла ISAM индексные узлы фиксируются, и их указатели не изменяются во время вставок и удалений, которые происходят позже (после этого изменяется только содержимое конечных узлов). Вследствие этого, если вставки в какой-либо конечный узел превышают емкость узла, новые записи сохраняются в цепочках переполнения. Если вставок в таблице намного больше, чем удалений, эти цепочки переполнения могут постепенно стать очень большими, и это влияет на время, необходимое для извлечения записи. [4]
Реляционные базы данных можно легко построить на основе ISAM-фреймворка с добавлением логики для поддержания валидности связей между таблицами. Обычно поле, используемое в качестве связи, внешний ключ , индексируется для быстрого поиска. Хотя это медленнее, чем простое сохранение указателя на связанные данные непосредственно в записях, это также означает, что изменения в физическом расположении данных не требуют обновления указателей — запись по-прежнему будет валидной.
ISAM прост в понимании и реализации, поскольку в первую очередь состоит из прямого доступа к файлу базы данных. Компромисс заключается в том, что каждая клиентская машина должна управлять собственным подключением к каждому файлу, к которому она обращается. Это, в свою очередь, приводит к возможности конфликтующих вставок в эти файлы, что приводит к несогласованному состоянию базы данных. Чтобы предотвратить это, некоторые реализации ISAM [5] [6] предоставляют функциональность блокировки всего файла или отдельных записей . Блокировка нескольких записей влечет за собой риск взаимоблокировки , если схема предотвращения взаимоблокировки не соблюдается строго. Проблемы блокировки и взаимоблокировки обычно решаются путем добавления клиент-серверной структуры, которая маршалирует клиентские запросы и поддерживает порядок. Полные системы управления транзакциями ACID предоставляются некоторыми клиент-серверными реализациями ISAM. [5] Это основные концепции, лежащие в основе системы управления базами данных (СУБД), которая является клиентским уровнем над базовым хранилищем данных.
ISAM был заменен в IBM на методологию VSAM (метод доступа к виртуальному хранилищу). Еще позже IBM разработала SQL/DS , а затем Db2 , которую IBM продвигает как свою основную систему управления базами данных . VSAM — это метод физического доступа, используемый в Db2. [ необходима цитата ]
Операционная система OpenVMS использует файловую систему Files-11 совместно с RMS ( Record Management Services ). RMS обеспечивает дополнительный уровень между приложением и файлами на диске, который обеспечивает согласованный метод организации данных и доступа на нескольких языках 3GL и 4GL. RMS обеспечивает четыре различных метода доступа к данным: последовательный, относительный доступ к номеру записи, доступ к адресу файла записи и индексированный доступ.
Индексированный метод доступа к чтению или записи данных обеспечивает желаемый результат только в том случае, если файл фактически организован как файл ISAM с соответствующими, заранее определенными ключами. Доступ к данным через заранее определенный ключ(и) чрезвычайно быстрый. Поддерживаются множественные ключи, перекрывающиеся ключи и сжатие ключей в хэш-таблицах. Предоставляется утилита для определения/переопределения ключей в существующих файлах. Записи можно удалять, хотя «сборка мусора» выполняется с помощью отдельной утилиты.
Инженеры IBM разработали систему ISAM для использования минимального объема памяти компьютера . Компромисс заключался в том, что канал ввода/вывода , блок управления и диск оставались более занятыми. Файл ISAM состоит из набора записей данных и двух или трех уровней индекса. Индекс дорожки содержит наивысший ключ для каждой дорожки диска на цилиндре, который он индексирует. Индекс цилиндра хранит наивысший ключ на цилиндре и адрес диска соответствующего индекса дорожки. Необязательный главный индекс , обычно используемый только для больших файлов, содержит наивысший ключ на дорожке индекса цилиндра и адрес диска этого индекса цилиндра. После загрузки файла записи данных не перемещаются; вставленные записи помещаются в отдельную область переполнения . Чтобы найти запись по ключу, индексы на диске ищутся сложной самомодифицирующейся программой канала . [7] Это увеличивало время занятости канала, блока управления и диска. С увеличением размеров физической и виртуальной памяти в более поздних системах это считалось неэффективным, и VSAM был разработан для изменения компромисса между использованием памяти и активностью диска.
Использование ISAM самомодифицирующихся канальных программ позже вызвало трудности для поддержки OS/360 со стороны CP-67 , поскольку CP-67 копировал всю канальную программу в фиксированную память при запуске операции ввода-вывода и транслировал виртуальные адреса в реальные адреса. [8]