PDS

Partitioned datasets
For example, a **PDS** or **Partitioned Data Set** is a dataset containing multiple //members//, each of which holds a separate sub-data set, similar to a [|directory] in other types of [|file systems]. This type of dataset is often used to hold executable programs (//load modules//), source program libraries (especially Assembler macro definitions). A PDS is most somewhat analogous to a [|Zip] file on [|microcomputers], except the files stored in a PDS are not compressed.

Besides members, a PDS consists also of their directory. Each member can be accessed directly using the directory structure. Once a member is located, the data stored in that member is handled in the same manner as a PS (sequential) data set.

Whenever a member is deleted, the space it occupied is unusable for storing other data. Likewise, if a member is re-written, it is stored in a new spot at the back of the PDS and leaves wasted “dead” space in the middle. The only way to recover “dead” space is to perform frequent file compression, that moves all members to the front of the data space and leaves free usable space at the back (note that current meaning of [|compression] differs greatly). PDS files can only reside on disk in order to use the directory structure to access individual members, not on tape. They are most often used for storing multiple JCL files, utility control statements and executable modules.

An improvement of this scheme is a Partitioned Data Set Extended (PDSE or PDS/E, sometimes just //libraries//) introduced with [|MVS/XA] system.

PDS/E structure is similar to PDS and is used to store the same types of data. However, PDS/E files have a better directory structure which does not require pre-allocation of directory blocks when the PDS/E is defined (and therefore does not run out of directory blocks if not enough were specified). Also, PDS/E automatically stores members in such a way that compression operation is not needed to reclaim "dead" space. PDS/E files can only reside on disk in order to use the directory structure to access individual members.