If you have an object graph you want to serialize but you don't want to have all of the object data in memory at the same time, you can partially load and store the data using multiple data sets and the technique of "adding another level of indirection". Here's the general technique:
Divide your data into data sets: a core set of data (which is termed the core-set) and sets of data that may or may not reside in memory (which are termed non-resident-data). Think of the core-set as an index which points to the non-resident-data.
Devise a naming scheme so that each set of non-resident-data will have a unique name. The core-set also needs a name that does not coincide with any name that you give to the non-resident-data sets.
Serialize/save the core-set using its unique name in the constructor of the ccs::serialization::storage<> object. The data of the core-set will include the names of the non-resident-data sets (which are named using the naming scheme that you devised in the previous step).
For each non-resident-data set, serialize/save its data under its unique name in the constructor of the ccs::serialization::storage<> object.
On loading, load just the core-set.
When you need access to the data in a non-resident-data set, load its data using its name which you obtained by loading the core-set.
To connect the core-set to the non-resident-data sets, maintain a std::map<name, non-resident-data*> (or something similar) where a NULL pointer indicates that the data is not resident in memory.