SOS: Scalable Object Store  4.2.1
 All Classes Functions Variables Typedefs Enumerations Enumerator Groups Pages

The Scalable Object Storage (SOS) is a high performance storage engine designed to efficiently manage structured data on persistent media.


An instance of a SOS Object Store is called a Container. A Container is identified by a name that looks like a POSIX Filesytem path. This allows Containers to be organized into a hierarchical name space. This is a convenience and does not mean that a Container is necessarily stored in a Filesytem.

See Containers for more information.


In order to facilitate management of the storage consumed by a Container, a Container is divided up into one or more Partitions. Paritions contain the objects that are created in the Container. The purpose of a Partition is to allow subsets of a Container's objects to be migrated from primary storage to secondary storage.

See the Partitions section for more information


Schemas define the format of Objects and are logically an Object's "type." There can be any number of Schema in the Container such that a single Container may contain Objects of many different types. The Container has a directory of Schemas. When Objects are created, the Schema handle is specified to inform the object store of the size and format of the object and whether or not one or more of its attributes has an Index.

See Schemas for more information.


An Object is a collection of Attributes. An Attribute has a Name and a Type. There are built-in types for an Attribute and user-defined types. The built in types include the familiar int, long, double types as well as arrays of these types. A special Attribute type is SOS_TYPE_OBJ, which is a Reference to another Object. This allows complex data structures like linked lists to be implemented in the Container.

The user-defined types are Objects.


An Index is a named, ordered collection of Keyy/Value references to Objects. Their purpose is to quickly find an Object in a container based on a Key. Indexes can be associated with a Schema or be independent of a Schema, for example, allowing a single Index to refer to objects of different types. If an Index is associated with a Schema Attribute, all management and insertion is handled automatically by the sos_obj_index() function.

Indexes that are not part of a Schema, i.e. not associated with an indexed attribute, are managed by the application; including the creation of keys, and insertion of Objects into the index.

See the Indices section for more information.