Введение
Изотопная разбавленная масс-спектрометрия
Интегрированная система управления базами данных (IDMS) — это система управления базами данных сетевой модели (CODASYL) для мэйнфреймов. Она была впервые разработана в компании B. F. Goodrich, а затем продана компании Cullinane Database Systems (переименованной в Cullinet в 1983 году). С 1989 года продукт принадлежит компании Computer Associates (ныне CA Technologies), которая переименовала его в Advantage CA IDMS, а затем просто в CA IDMS. В 2018 году компания Broadcom приобрела CA Technologies, вернув ей название IDMS.
История
Корни IDMS уходят в пионерскую систему управления базами данных под названием Integrated Data Store (IDS), разработанную в General Electric командой во главе с Чарльзом Бахманом и впервые выпущенную в 1964 году. В начале 1960-х годов IDS была взята из ее первоначальной формы компьютерной группой химического отдела B. F. Goodrich и переписана на языке, называемом Intermediate System Language (ISL). ISL был разработан как портативный язык системного программирования, способный создавать код для различных целевых машин. Поскольку ISL был на самом деле написан на ISL, его можно было относительно легко перенести на другие машинные архитектуры, а затем создать код для выполнения на них. Компьютерная группа химического подразделения рассматривала возможность продажи копий IDMS другим компаниям, но руководство сообщило, что они не занимаются производством программного обеспечения. В конечном итоге было заключено соглашение с Джоном Куллианом о покупке прав и маркетинге продукта. Поскольку Куллиан должен был выплачивать B. F. Goodrich роялти, все дополнительные продукты были перечислены и выставлялись как отдельные продукты – даже если они были обязательны для работы основного продукта IDMS. Это иногда вводило клиентов в заблуждение. Первоначальными платформами были компьютер GE 235 и компьютер с коммутацией сообщений GE DATANET 30: позже продукт был портирован на мэйнфреймы IBM и на аппаратное обеспечение DEC и ICL. Портированная версия IBM работает на мэйнфреймовых системах IBM (System/360, System/370, System/390, zSeries, System z9). В середине 1980-х годов утверждалось, что было продано около 2500 лицензий IDMS. Среди пользователей были Strategic Air Command, Ford of Canada, Ford of Europe, Jaguar Cars, Clarks Shoes UK, AXA/PPP, MAPFRE, Royal Insurance, Tesco, Manulife, Hudson's Bay Company, Cleveland Clinic, Bank of Canada, General Electric, Aetna и BT в Великобритании. Версия для использования на компьютерах серии PDP 11 Digital Equipment Corporation была продана DEC и продавалась как DBMS 11. В 1976 году исходный код был лицензирован ICL, которая портировала программное обеспечение для работы на своих мэйнфреймах серии 2900, а затем и на более старые модели 1900. ICL продолжала разработку программного обеспечения независимо от Cullinane, продавая оригинальный портированный продукт под названием ICL 2900 IDMS, а улучшенную версию – как IDMSX. В этой форме она использовалась многими крупными пользователями Великобритании, например, системой уплаты подоходного налога Inland Revenue. Многие из этих систем IDMSX для правительства Великобритании все еще работали в 2013 году. В начале – середине 1980-х годов системы управления реляционными базами данных стали набирать популярность, чему способствовало увеличение вычислительной мощности оборудования и переход к миникомпьютерам и клиент-серверной архитектуре. Реляционные базы данных предлагали повышенную производительность разработки по сравнению с системами CODASYL, а традиционные возражения, основанные на низкой производительности, постепенно отпадали. Cullinet попыталась конкурировать с IBM DB2 и другими реляционными базами данных, разработав реляционный интерфейс и ряд инструментов повышения производительности. Среди них был Automatic System Facility (ASF), который использовал существующую функцию IDMS под названием LRF (Logical Record Facility). ASF был генератором баз данных, работающим по принципу заполнения пропусков, который также разрабатывал мини-приложение для обслуживания таблиц. Трудно судить, были ли эти функции успешными в продлении срока службы продукта, но в долгосрочной перспективе они оказали незначительное влияние. Пользователи, оставшиеся с IDMS, были в первую очередь заинтересованы в его высокой производительности, а не в реляционных возможностях. Широко признавалось (благодаря масштабной кампании Э. Ф. Кодда, отца реляционной модели), что существует значительная разница между реляционной базой данных и сетевой базой данных с реляционным интерфейсом. В 1989 году Computer Associates, после приобретения Cullinet, продолжила разработку и выпустила Release 12.0 с полной поддержкой SQL в 1992–93 годах. CA Technologies продолжала продавать и поддерживать CA IDMS и расширенные версии IDMS в последующих релизах, добавив поддержку TCP/IP, поддержку двухфазных коммитов, публикацию XML, поддержку специализированных процессоров zIIP, веб-доступ в сочетании с CA IDMS Server, SQL Option и администрирование баз данных с графическим интерфейсом через инструмент CA IDMS Visual DBA. Системы CA IDMS до сих пор используются в бизнесе по всему миру. Многие клиенты выбрали возможность веб-интеграции своих приложений через CA IDMS SQL Option, который является частью стратегии Dual Database Strategy компании CA Technologies.
Интегрированный словарь данных
Одной из передовых возможностей IDMS был встроенный интегрированный словарь данных (IDD). IDD был разработан главным образом для ведения определений баз данных. Сам по себе он являлся базой данных IDMS. Администраторы баз данных (DBA) и другие пользователи взаимодействовали с IDD, используя язык определения словаря данных (DDDL). IDD также использовался для хранения определений и кода для других продуктов семейства IDMS, таких как ADS/Online и IDMS DC. Главным преимуществом IDD была его расширяемость, позволявшая создавать определения практически для любых объектов. Некоторые компании использовали его для разработки внутренней документации.
Логическая модель данных
Модель данных, предлагаемая пользователям, – это сетевая модель CODASYL. Основными структурами в этой модели являются записи и наборы. Записи по существу следуют структуре COBOL, состоящей из полей различных типов: это позволяет создавать сложную внутреннюю структуру, такую как повторяющиеся элементы и группы. Наиболее характерной концепцией структурирования в модели Codasyl является набор. Не следует путать с математическим множеством, набор Codasyl представляет собой связь «один ко многим» между записями: один владелец, много членов. Тот факт, что запись может быть членом многих различных наборов, является ключевым фактором, отличающим сетевую модель от более ранней иерархической модели. Как и в случае с записями, каждый набор принадлежит к именованному типу наборов (разные типы наборов моделируют различные логические отношения). Наборы, по сути, упорядочены, и последовательность записей в наборе может использоваться для передачи информации. Запись может участвовать как владелец и член любого количества наборов. Записи имеют идентификатор, который представлен значением, известным как ключ базы данных. В IDMS, как и в большинстве других реализаций Codasyl, ключ базы данных напрямую связан с физическим адресом записи на диске. Ключи базы данных также используются в качестве указателей для реализации наборов в виде связных списков и деревьев. Это тесное соответствие между логической моделью и физической реализацией (которое не является строго необходимой частью модели Codasyl, но было характерно для всех успешных реализаций) обеспечивает эффективность поиска в базе данных, но также делает операции, такие как загрузка базы данных и реструктуризация, достаточно затратными. Доступ к записям может осуществляться непосредственно по ключу базы данных, путем следования по связям наборов или путем прямого доступа с использованием ключевых значений. Первоначально единственный прямой доступ был реализован через хеширование, механизм, известный в модели Codasyl как CALC-доступ. В IDMS CALC-доступ реализуется через внутренний набор, связывающий все записи, имеющие одинаковое хеш-значение, с владельческой записью, которая занимает первые несколько байтов каждой страницы диска. В последующие годы некоторые версии IDMS добавили возможность доступа к записям с использованием индексов, подобных B-деревьям.
Хранение
IDMS организует свои базы данных в виде ряда файлов. Эти файлы отображаются и предварительно форматируются в так называемые области. Области подразделяются на страницы, которые соответствуют физическим блокам на диске. Записи базы данных хранятся в этих блоках. DBA выделяет фиксированное количество страниц в файле для каждой области. Затем DBA определяет, какие записи должны храниться в каждой области, и детали того, как они должны быть сохранены. IDMS распределяет специальные страницы выделения пространства по всей базе данных. Эти страницы используются для отслеживания свободного пространства, доступного на каждой странице в базе данных. Для снижения требований к вводу-выводу свободное пространство отслеживается только для всех страниц, когда свободное пространство для области опускается ниже 30%. Для хранения записей в базе данных IDMS доступны четыре метода: Прямой, Последовательный, CALC и VIA. Версия Fujitsu/ICL IDMSX расширяет этот список еще двумя методами: Page Direct и Random. В прямом режиме пользователь указывает целевой ключ базы данных, и запись хранится как можно ближе к этому ключу, при этом фактический ключ базы данных, на котором хранится запись, возвращается в прикладную программу. Последовательное размещение (не следует путать с индексированным последовательным) просто помещает каждую новую запись в конец области. Этот вариант используется редко. CALC использует алгоритм хеширования для определения места размещения записи; затем хеш-ключ обеспечивает эффективное извлечение записи. Вся область CALC предварительно форматируется, каждая из них содержит заголовок, состоящий из специальной записи "владелец" CALC. Алгоритм хеширования определяет номер страницы (на основе которого можно определить физический адрес диска), и запись затем сохраняется на этой странице или как можно ближе к ней, и связывается с записью заголовка на этой странице с использованием набора CALC. Записи CALC связаны с записью владельца CALC страницы с помощью односвязного списка (указателей). Владелец CALC, расположенный в заголовке страницы, таким образом, владеет набором всех записей, ориентированных на его конкретную страницу (независимо от того, хранятся ли записи на этой странице или, в случае переполнения, на другой странице). CALC обеспечивает чрезвычайно эффективное хранение и извлечение: IDMS может извлечь запись CALC примерно за 1.1 операций ввода-вывода. Однако метод плохо справляется с изменениями значения первичного ключа, и требуется дорогостоящая реорганизация, если необходимо увеличить количество страниц. В качестве обходного пути можно расширить область, а затем запустить прикладную программу, которая последовательно сканирует область для каждой записи CALC и использует оператор MODIFY для обновления каждой записи. Это приводит к тому, что каждая запись CALC связывается с набором CALC для правильной целевой страницы, рассчитанной для нового диапазона страниц области. Недостатком этого метода является то, что очень мало записей CALC окажется на своих целевых страницах, и навигация по набору CALC каждой страницы, вероятно, потребует большого количества операций ввода-вывода. В результате этого рекомендуется использовать этот обходной путь только в крайних случаях, так как производительность снизится. Размещение VIA пытается хранить запись рядом с ее владельцем в определенном наборе. Обычно записи кластеризуются на той же физической странице, что и владелец. Это обеспечивает эффективную навигацию при доступе к записи по этой установленной связи. (VIA позволяет хранить записи в другой области IDMS, чтобы они могли храниться отдельно от владельца, но оставаться сгруппированными для повышения эффективности. В IDMSX они также могут быть смещены от владельца на определенное количество страниц). Page Direct (только IDMSX) аналогичен режиму Direct, однако указывается номер целевой страницы базы данных, и запись связывается с цепочкой CALC для этой страницы. Random (только IDMSX) выделяет номер целевой страницы записи при ее хранении с использованием алгоритма CALC (это может использовать ключ внутри записи или, в случае неключевого случайного доступа, использовать дату и время хранения в качестве начального значения для алгоритма CALC). Наборы данных обычно поддерживаются в виде односвязных списков, используя ключ базы данных в качестве указателя. Каждая запись включает прямую ссылку на следующую запись; разработчик базы данных может выбрать, включать ли указатели владельца и указатели на предыдущую запись (если они не указаны, навигация в этих направлениях будет медленнее). В некоторых версиях IDMS впоследствии была добавлена возможность определения индексов: индексы записей, позволяющие находить записи по значению вторичного ключа, или индексы наборов, позволяющие извлекать элементы набора по значению ключа. Записи размещения IDMSX Page Direct и Random обычно используются в сочетании с индексами записей, как описано выше. Сами индексы подчиняются правилам размещения, либо Direct (что фактически означает "CALC с использованием ID индекса в качестве ключа"), либо CALC.