IBM Information Management System

The IBM Information Management System (IMS) is a joint hierarchical database and information management system that supports transaction processing.

History
IBM designed the IMS with Rockwell and Caterpillar starting in 1966 for the Apollo program, where it was used to inventory the very large bill of materials (BOM) for the Saturn V Moon rocket and Apollo space vehicle.

The system was first considered operational when the first "READY" message appeared on an IBM 2740 terminal in Downey, California, on August 14, 1968. In the interim period, IMS has undergone many developments as IBM System/360 technology evolved into the current z/OS and IBM zEnterprise System technologies.

Vern Watts had worked continuously on IMS since the 1960's and was IMS's chief architect for many years. Watts joined IBM in 1956 and worked at IBM's Silicon Valley development labs until his death on April 4, 2009.

Database
The IMS Database component stores data using a hierarchical model, which is quite different from IBM's later released relational database, IBM Db2. In IMS, the hierarchical model is implemented using blocks of data known as segments. Each segment can contain several pieces of data, which are called fields. For example, a customer database may have a root segment (or the segment at the top of the hierarchy) with fields such as phone, name, and age. Child segments may be added underneath another segment; for instance, one order segment under each customer segment represents each order a customer has placed with a company. Likewise, each order segment may have many child segments for each item on the order.

There are three basic forms of IMS hierarchical databases:

"Full Function" databases

 * Directly descended from the Data Language Interface (DL/I) databases originally developed for Apollo, full function databases can have primary and secondary indexes, accessed using DL/I calls from an application program, like SQL calls to IBM Db2 or Oracle.
 * Full function databases can be accessed by a variety of methods, although Hierarchical Direct (HDAM) and Hierarchical indexed direct (HIDAM) dominate. The other formats are Simple Hierarchical Indexed Sequential (SHISAM), Hierarchical Sequential (HSAM), and Hierarchical Indexed Sequential (HISAM).
 * Full function databases store data using VSAM, a native z/OS access method, or Overflow Sequential (OSAM), an IMS-specific access method that optimizes the I/O channel program for IMS access patterns. In particular, OSAM performance benefits from sequential access of IMS databases (OSAM Sequential Buffering).

"Fast Path" databases

 * Fast Path databases are optimized for extremely high transaction rates. Data Entry Databases (DEDBs) and Main Storage Databases (MSDBs) are the two types of Fast Path databases. DEDBs use a direct (randomizer) access technique similar to Full Function HDAM and IMS V12 provided a DEDB Secondary Index function. MSDBs do not support secondary indexing. Virtual Storage Option (VSO) DEDBs can replace MSDBs in modern IMS releases, so MSDBs are gradually disappearing.

DEDB performance comes from the use of high-performance (Media Manager) access methods, asynchronous write after commit, and optimized code paths. Logging is minimized because no data is updated on disk until commit, so UNDO (before image) logging is not needed, nor is a backout function. Uncommitted changes can simply be discarded. Starting with IMS Version 11, DEDBs can use z/OS 64-bit storage for database buffers. DEDBs architecture includes a Unit of Work (UOW) concept, which made an effective online reorganization utility simple to implement. This function is included in the base product.

High Availability Large Databases (HALDBs)

 * IMS V7 introduced HALDBs, an extension of IMS full function databases to provide better availability, better handling of extremely large data volumes, and, with IMS V9, online reorganization to support continuous availability. (Third party tools exclusively provided online reorganization prior to IMS V9.) A HALDB can store in excess of 40 terabytes of data.

Transaction Manager
IMS is a transaction manager, (IMS TM, also known as IMS DC) which interacts with an end user connected through VTAM or TCP/IP, (including 3270 and Web user interfaces) or another application. It can process a business function (such as a banking account withdrawal), and maintain state throughout the process, making sure that the system records the business function correctly to a data store.

IMS TM uses a messaging and queuing paradigm. An IMS control program receives a transaction entered from a terminal (or Web browser or other application) and then stores the transaction on a message queue (in memory or in a dataset). IMS then invokes its scheduler on the queued transaction to start the business application program in a message processing region. The message processing region retrieves the transaction from the IMS message queue and processes it, reading and updating IMS and/or Db2 databases and ensuring proper recording of the transaction. Then, if required, IMS enqueues a response message back onto the IMS message queue. Once the output message is complete and available, the IMS control program sends it back to the originating terminal. IMS TM can handle this whole process thousands (or even tens of thousands) of times per second. In 2013, IBM completed a benchmark on IMS Version 13 demonstrating the ability to process 100,000 transactions per second on a single IMS system.

Application
IMS TM provides a standard environment for transaction execution. Several Chinese banks had purchased IMS by the late 2000s to support the country's burgeoning financial industry.

IMS complements IBM Db2, IBM's relational database system introduced in 1982. IMS generally performs faster than Db2 for common tasks, but may require more programming effort to design and maintain for non-primary duties.

A relational data warehouse may be used to supplement an IMS database. For example, IMS may provide primary ATM transactions because it performs well for such a specific task.