Введение

Метод создания, обслуживания и манипулирования компьютерными файлами

ISAM, аббревиатура от Indexed Sequential Access Method, – это метод создания, обслуживания и манипулирования компьютерными файлами данных, позволяющий извлекать записи последовательно или произвольным образом по одному или нескольким ключам. Для быстрого поиска необходимых записей в индексированных файлах поддерживаются индексы ключевых полей. Компания IBM первоначально разработала ISAM для мэйнфреймов, но реализации доступны для большинства компьютерных систем. Термин ISAM используется для обозначения нескольких связанных понятий: продукт IBM ISAM и алгоритм, который он использует; система управления базами данных (СУБД), в которой разработчик приложения напрямую использует интерфейс программирования приложений (API) для поиска индексов с целью нахождения записей в файлах данных. В отличие от этого, в реляционной СУБД используется оптимизатор запросов, который автоматически выбирает индексы. Это также алгоритм индексации, обеспечивающий как последовательный, так и ключевой доступ к данным. Большинство СУБД используют различные варианты B-дерева для этой цели, хотя оригинальные реализации IBM ISAM и VSAM не использовали его. В наиболее общем смысле, ISAM – это любой индекс для базы данных. Индексы используются практически всеми базами данных.

Организация

В системе ISAM данные организованы в записи, состоящие из полей фиксированной длины, которые изначально хранятся последовательно в порядке ключей. Вторичные наборы записей, известные как индексы, содержат указатели на местоположение каждой записи, позволяя извлекать отдельные записи без необходимости поиска по всему набору данных. Это отличается от современных навигационных баз данных, в которых указатели на другие записи хранились непосредственно внутри самих записей. Основное преимущество ISAM заключается в том, что индексы имеют небольшой размер и могут быть быстро просмотрены, возможно, целиком в памяти, что позволяет базе данных получать доступ только к необходимым записям. Дополнительные изменения данных не требуют внесения изменений в другие данные, только в соответствующую таблицу и индексы. При создании файла ISAM индексные узлы фиксированы, и их указатели не изменяются при последующих вставках и удалениях (изменяется только содержимое листовых узлов). В результате, если количество вставок в листовой узел превышает его емкость, новые записи хранятся в цепочках переполнения. Если в таблице количество вставок значительно превышает количество удалений, эти цепочки переполнения могут постепенно становиться очень большими, что влияет на время, необходимое для извлечения записи. Реляционные базы данных могут быть легко построены на основе ISAM с добавлением логики для поддержания целостности связей между таблицами. Обычно поле, используемое в качестве связи (внешний ключ), индексируется для быстрого поиска. Хотя это медленнее, чем просто хранить указатель на связанные данные непосредственно в записях, это также означает, что изменения в физической структуре данных не требуют обновления указателей – запись останется действительной. ISAM прост в понимании и реализации, поскольку в основном состоит из прямого доступа к файлу базы данных. Компромисс заключается в том, что каждая клиентская машина должна самостоятельно управлять своим соединением с каждым файлом, к которому она обращается. Это, в свою очередь, может привести к конфликтующим вставкам в эти файлы и, как следствие, к несогласованному состоянию базы данных. Для предотвращения этого некоторые реализации ISAM предоставляют функциональность блокировки всего файла или отдельных записей. Блокировка нескольких записей сопряжена с риском возникновения взаимоблокировки (deadlock), если строго не соблюдается схема предотвращения взаимоблокировок. Проблемы блокировки и взаимоблокировки обычно решаются путем добавления клиент-серверной архитектуры, которая управляет клиентскими запросами и поддерживает порядок их выполнения. Некоторые реализации ISAM-клиент-сервера предоставляют полноценные системы управления транзакциями ACID. Это увеличивало время загрузки канала, контроллера и диска. С увеличением объемов физической и виртуальной памяти в более поздних системах это было признано неэффективным, и VSAM был разработан для изменения баланса между использованием памяти и активностью диска. Использование ISAM самомодифицируемых программ канала впоследствии вызвало трудности при поддержке CP 67 для OS/360, поскольку CP 67 копировала всю программу канала в фиксированную память при запуске операции ввода-вывода и преобразовывала виртуальные адреса в физические.