Architecture Overview
Hiperspace
The core to Hiperspace is the common base class that all Spaces inherit from, providing transparency between different storage drivers and composable interceptors behavior. The HiperSpace abstract base defines the methods to
- Bind Elements to a Hiperspace (internally the notion of Add and Update are not used)
- Get an Element by its key
- Find Elements within a range
- Zip/Unzip Elements to a compressed stream for bulk transfer
Applications can subscribe to HiperSpace events for telemetry and other purposes.
SubSpace
Subspace provides a sub-set for HiperSpace for a point in time without duplicates and only in the Horizon of the global filters Subspace is the base space that domain spaces derive from. It adds AsAt date parameter for temporal time filtering and Horizon filters for domain specific constraints. Any number of Subspaces can be opened for a an underlying Hiperspace to compare time horizons or context specific values. SubSpace provides basic query infrastructure but is currently limited to queries that do not require reflection or code generation.
SubSpace is the Hiperspace equivalent of DbContext in dotnet Entity Framework or Entity Manager in Java Hibernate.
Parameter ░░ | Type ░░░░░░░░░░ | Usage░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ |
---|---|---|
space | Hiperspace | the base Space that provides Bind/Get/Find functionality that these methods are forwarded to |
horizon | Horizon array | the global filters applied to all Elements bound to the space or fetched from it |
AsAt | DateTime option | null for current, or the point in time that versioned Elements should be seen at |
DeltaFrom | DateTime option | null for all, or the earliest point in time that Elements are read from |
The base SubSpace
has SetSpace<Node>
and SetSpace<Edge>
so that every domain-specific-subspace can be treated as a graph store.
SetSpace
SetSpace provides a subset of Elements in a SubSpace for a specific type.
SetSpace<>
's in a domain are constructed by the domain Subspace
and have a reference back to it to call the HiperSpace bind / get / find operations of the driver
Element<>
Element is the base interface for all Elements stored in Hiperspace, and includes a optional reference to the SetSpace<>
it is bound to.
All Fields of an Element can be updated when they are no bound to SetSpace<>
ElementVersion<>
ElementVersion extends Element
adding the AsAt
propety and a method to get the full history of the element. GetVersions()
is the only way to get history since a SubSpace
can never contain duplicates.
Horizon
Horizon provides global filters for SubSpace
that implement constraints, and access control.
Hiperspace deliberately implements constraints in this way so that the same layout can be used for error logging
When a SubSpace
is constructed with Horizon filters, then element specific filters are passed to the SetSpace
's for actual filtering