Defines the interface to low level IO sub-system. The objective is to present a generic interface that can potentially be implemented in a number of different ways. The default implementation is in {@link org.simpledbm.rss.io.impl}.
Database Managers typicaly use files to store various types of data, such as, log files, data files, etc. However, from the perspective of a DBMS, the concept of a file is a logical one; all the DBMS cares about is a named storage container that supports random positioned IO. As long as this requirement is met, it is not important whether a container maps to a file or to some other device.
The objective of this package is to provide a level of abtraction to the rest of the DBMS so that the mapping of a container to a file becomes an implementation artifact. If desired, containers may be mapped to raw devices, or to segments within a file.
Container names are usually not good identifiers for the rest of the system. Integer identifiers are better, especially when other objects need to refer to specific containers. Integers take less amount of storage, and also remove the dependency between the container's name and the rest of the system. To support this requirement, the {@link StorageManager} interface is provided, which maintains a mapping of StorageContainers to integer identifiers. Note that the Storage sub-system does not decide how to map the containers to ids; it enables the registration of these mappings and allows StorageContainer objects to be retrieved using their numeric identifiers.