Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
ISAM
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Method for creating, maintaining, and manipulating computer files}} {{other uses}} {{More citations needed section|date=January 2014|talk=Anchor}} '''Indexed Sequential Access Method''' ('''ISAM''') is a method for creating, maintaining, and manipulating [[computer file]]s of data so that records can be retrieved sequentially or randomly by one or more keys. Indexes of key fields are maintained to achieve fast retrieval of required file records in [[indexed file]]s. [[IBM]] originally developed ISAM for [[mainframe computer]]s, but implementations are available for most computer systems. The term ''ISAM'' is used for several related concepts: *The IBM ISAM product and the [[algorithm]] it employs.<ref>{{cite book | author=Chin, Y.H. | title=Proceedings of the 1st International Conference on Very Large Data Bases - VLDB '75 | chapter=Analysis of VSAM's free-space behavior | year=1975 | pages=514–515| doi=10.1145/1282480.1282529 | isbn=9781450318181 | s2cid=11082747 }}</ref> *A [[database]] system where an application developer directly uses an [[application programming interface]] to search indexes in order to locate records in data files. In contrast, a [[relational database]] uses a [[query optimizer]] which automatically selects indexes.<ref>{{cite web | url=http://www.techrepublic.com/article/explore-the-differences-between-isam-and-relational-databases/ | title=Explore the differences between ISAM and relational databases | date=2004-02-13 | access-date=17 October 2014 | author=Bogue, Robert L.}}</ref> *An indexing algorithm that allows both sequential and keyed access to data.<ref>{{cite journal | title=Analysis of index-sequential files with overflow chaining | author=Larson, Per-Åke | journal=ACM Transactions on Database Systems | year=1981 | volume=6 | issue=4| pages=671–680 | doi=10.1145/319628.319665 | s2cid=16261748 | doi-access=free }}</ref> Most databases use some variation of the [[B-tree]] for this purpose, although the original IBM ISAM and [[VSAM]] implementations did not do so. *Most generally, any index for a database. Indexes are used by almost all databases. ==Organization== In an ISAM system, data is organized into [[Record (computer science)|records]] which are composed of fixed length fields, originally stored sequentially in key sequence. Secondary set(s) of records, known as ''indexes'', contain pointers to the location of each record, allowing individual records to be retrieved without having to search the entire data set. This differs from the contemporaneous [[navigational database]]s, in which the pointers to other records were stored inside the records themselves. The key improvement in ISAM is that the indexes are small and can be searched quickly, possibly entirely in memory, thereby allowing the database to access only the records it needs. Additional modifications to the data do not require changes to other data, only the table and indexes in question. When an ISAM file is created, index nodes are fixed, and their pointers do not change during inserts and deletes that occur later (only content of leaf nodes change afterwards). As a consequence of this, if inserts to some leaf node exceed the node's capacity, new records are stored in overflow chains. If there are many more inserts than deletions from a table, these overflow chains can gradually become very large, and this affects the time required for retrieval of a record.<ref name="DMS">Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems, McGraw-Hill Higher Education (2000), 2nd edition (en) page 252</ref> [[Relational database management system|Relational database]]s can easily be built on an ISAM framework with the addition of logic to maintain the validity of the links between the tables. Typically the field being used as the link, the ''[[foreign key]]'', will be indexed for quick lookup. While this is slower than simply storing the pointer to the related data directly in the records, it also means that changes to the physical layout of the data do not require any updating of the pointers—the entry will still be valid. ISAM is simple to understand and implement, as it primarily consists of direct access to a database file. The trade-off is that each client machine must manage its own connection to each file it accesses. This, in turn, leads to the possibility of conflicting inserts into those files, leading to an inconsistent database state. To prevent this, some ISAM implementations<ref name=":0" /><ref>{{Cite web|title=C-ISAM Programmers Manual|url=http://publibfp.dhe.ibm.com/epubs/pdf/7897b.pdf}}</ref> provide whole-file or individual record [[File locking|locking]] functionality. Locking multiple records runs the risk of [[deadlock (computer science)|deadlock]] unless a [[Deadlock prevention algorithms|deadlock prevention]] scheme is strictly followed. The problems of locking, and deadlock are typically solved with the addition of a [[Client–server model|client–server]] framework which marshals client requests and maintains ordering. Full [[ACID]] transaction management systems are provided by some ISAM client–server implementations.<ref name=":0" /> These are the basic concepts behind a [[database management system]] (DBMS), which is a client layer over the underlying data store. ISAM was replaced at IBM with a methodology called [[Virtual Storage Access Method|VSAM]] (virtual storage access method). Still later, IBM developed [[IBM SQL/DS|SQL/DS]] and then [[IBM Db2|Db2]] which IBM promotes as their primary [[database management system]]. VSAM is the physical access method used in Db2.{{citation needed|date=September 2019}} ==OpenVMS== The [[OpenVMS]] operating system uses the [[Files-11]] file system in conjunction with RMS ([[Record Management Services]]). RMS provides an additional layer between the application and the files on disk that provides a consistent method of data organization and access across multiple 3GL and 4GL languages. RMS provides four different methods of accessing data; sequential, relative record number access, record file address access, and indexed access. The indexed access method of reading or writing data only provides the desired outcome if in fact the file is organized as an ISAM file with the appropriate, previously defined keys. Access to data via the previously defined key(s) is extremely fast. Multiple keys, overlapping keys and key compression within the hash tables are supported. A utility to define/redefine keys in existing files is provided. Records can be deleted, although "garbage collection" is done via a separate utility. ==Design considerations== IBM engineers designed the ISAM system to use a minimum amount of [[computer memory]]. The tradeoff was that the [[channel I/O|Input/Output channel]], control unit, and disk were kept busier. An ISAM file consists of a collection of data records and two or three levels of index. The ''track index'' contains the highest key for each [[Track (disk drive)|disk track]] on the [[Cylinder-head-sector#Cylinders|cylinder]] it indexes. The ''cylinder index'' stores the highest key on a cylinder, and the [[Cylinder-head-sector|disk address]] of the corresponding track index. An optional ''master index'', usually used only for large files, contains the highest key on a cylinder index track and the disk address of that cylinder index. Once a file is loaded data records are not moved; inserted records are placed into a separate ''overflow area''. To locate a record by key the indexes on disk are searched by a complex [[Self-modifying code#Channel programs|self-modifying]] [[Channel I/O#Channel program|channel program]].<ref name="LIOCS">{{cite book |last1=IBM Corporation |title=DOS/VS LIOCS Volume 3: DAM and ISAM Logic |date=1973 |pages=[https://archive.org/details/bitsavers_ibm370DOSVIOCSVolume3DAMandISAMLogicRel28Jun73_36886118/page/n62 63]–72 |url=https://archive.org/details/bitsavers_ibm370DOSVIOCSVolume3DAMandISAMLogicRel28Jun73_36886118 |access-date=Dec 30, 2018}}</ref> This increased the busy time of the channel, control unit, and disk. With increased physical and virtual memory sizes in later systems this was seen as inefficient, and [[VSAM]] was developed to alter the tradeoff between memory usage and disk activity. ISAM's use of self-modifying channel programs later caused difficulties for [[CP-67]] support of [[OS/360]], since CP-67 copied an entire channel program into fixed memory when the I/O operation was started and translated virtual addresses to real addresses.<ref>{{cite book |last1=IBM Corporation |title=IBM Virtual Machine Facility /370: Planning Guide |date=1972 |page=45 |url=http://www.bitsavers.org/pdf/ibm/370/VM_370/Release_1/GC20-1801-0_VM370_Planning_Guide_Aug72.pdf |access-date=Jan 8, 2018}}</ref> == ISAM-style implementations == *[[Advantage Database Server]] database manager *[[Berkeley DB]] *[[Btrieve]] *FairCom DB<ref name=":0">{{Cite web|title=FairCom ISAM API for C - Developers Guide|url=https://docs.faircom.com/doc/ctreeplus/}}</ref> *C-ISAM<ref name="rdbmsinformix20070612">{{Cite interview |interviewer=Luanne Johnson |title=RDBMS Workshop: Informix |url=https://archive.computerhistory.org/resources/access/text/2013/05/102702566-05-01-acc.pdf |access-date=2025-05-30 |publisher=Computer History Museum |date=2007-06-12}}</ref> *[[DataFlex]] proprietary database *[[dBase]] and related products [[Clipper (programming language)|Clipper]] and [[Foxpro]] *[[Digital Equipment Corporation]] [[Record Management Services]] *[[Enscribe]] is the HP Tandem structured file access method *[[Extensible Storage Engine]] *[[Access Database Engine]] (ACE and formerly JET) used by [[Microsoft Access]] *[[MySQL]] implements and extends ISAM as [[MyISAM]] *[[Paradox (database)|Paradox]] *pblIsam GPL implementation written in C<ref>{{cite web|last1=Graf|first1=Peter|title=pblIsamFile Implementation|url=http://www.mission-base.com/peter/source/pbl/doc/isamfile.html|website=mission-base.com|access-date=Sep 8, 2017}}</ref> *[[Superbase (database)|Superbase database]] family *[[DBM (computing)|dbm]] DBM and Flat File databases working in tandem == See also == *[[Sequential access memory]] (SAM) *[[Virtual storage access method]] (VSAM) *[[Flat file]] *[[NoSQL]] * [[DBM (computing)|dbm]] == References == {{Reflist}} {{Mainframe I/O access methods}} {{DEFAULTSORT:Isam}} [[Category:Computer file systems]] [[Category:Computer file formats]] [[Category:IBM software]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite interview
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Mainframe I/O access methods
(
edit
)
Template:More citations needed section
(
edit
)
Template:Other uses
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)