engine contains 3 layers of abstraction to manage the data:
- Layer 1: Instance Layer
- Layer 2: Meta representation of objects and classes
- Layer 3: The physical storage
Layers Big Picture
Layer 1: The instance layer
- This layer works with Instances.
- This is the entry point of NDatabase.
- It is the user interface to NDatabase.
Implementation (Layer 1 -> Layer 2):
- ObjectIntrospector - uses reflection to transform an object into a
NonNativeObjectInfo meta representation.
- ClassIntrospector - uses reflection to transform a class into a
ClassInfo meta representation.
Implementation (Layer 2 -> Layer 1):
- InstanceBuilder - transforms a NonNativeObjectInfo into an object. It is used when retrieving objects.
Layer 2: The meta representation
- This layer is a Meta Representation layer.
- It holds all the data and definition in a language independent way.
- Main classes are ClassInfo (Meta representation of a class), NonNativeObjectInfo (Meta representation of an instance),
NativeObjectInfo (Meta representation of a native value, like int, long, String) and other minor classes.
Layer 3: The file storage
stores all data in a unique binary file. This file will contain:
- The database meta-model : All the classes already stored in the base.
- The instances.
- The indexes.
- And other things, for the details please refer to documentation
page about NDatabase file format.
Implementation (Layer 2 to Layer 3):
- ObjectWriter - writes a NonNativeObjectInfo to the database file.
Implementation (Layer 3 to Layer 2):
- ObjectReader - reads the database file and creates a NonNativeObjectInfo.