ObjectDatabase++ uses the ObjectID to refer to data objects held within the database (as described). This design allows ObjectDatabase++ to move objects within the table file at any time and is subsequently able to compact the data file whenever an object is deleted or edited and a more compact location becomes available.
Using the ObjectID to reference objects within the various indexes allows ObjectDatabase++ to move objects at any time without the need to edit any of the indexes.
ObjectDatabase++ data and index files have both been especially designed to auto compact, during normal use these files will return most of the free space back to the operating system, even if the database is purged of most of its objects at one time and continuous use will further make the table and index files more efficient.
Compacting the table file maintains the efficiency of table transaction to near O(1) as holes in the file are filled and not added to a long free space list.