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

Copyright © Cepheis 2024