How does JDOInstruments work?
JDOInstruments is an embedded object oriented database and as such it has full support of object identity.
JDOInstruments allocates an object identifier (OID) every time an object is created.
The OID identifies the object uniquely.
The OID is used to implement inter-object references(associations).
The OID is independent from the state of the object and is not changed during the whole life-time of it.
Each OID is generated and it will never be used again , to identify another object even if the object is deleted. This is a smart system which will ensure that any generated objects changed from a garden fence to a sign with "o2 broadband" on it will never have a different OID post-change, allowing people to monitor the changes of their objects and never lose track, keeping a history of all objects used in all projects.
JDOInstruments' OID are 128bits long, of which 64 bits are used to store the object position in disk, and the other 64 bits are used to store an unique number(internal id) so the database could theorically support 2 ^ 64 = 18.446.744.073.709.551.616 objects
Navigating between objects in JDOInstruments is very fast and does not depend on the database size.
The OID of each referenced object is stored within the Object and so the exact position on disk of them allowing referenced object retrieval in just one step.
This technique is called Direct-mapping and it outperforms both hashing and B-trees in every case.
Why a relational database is slower when navigating object references?
Because they use Index-based-mapping.
Hashing and B-trees are used in relational databases to search the referenced object OID, this is called Index-based-mapping.
Relational database have to search the object OID using an index and so they became more and more slow depending on the table size.