Release 10th July 2025
Change Control note Hiperspace --version 2.4.0 HiLang --version 2.4.0
Overview
Hiperspace uses the protobuf wire format to serialize elements in the domain SubSpace for persistence as a key/value in the store (primarily RocksDB), with minimal transformation and no padding.
The schema can evolve without the need to alter history, using two rules:
- #id numeric aliases for {entities, segments, aspects, keys, values, indexes} are never reused
- The datatype of {keys, values} is never changed (other than by renaming items)
MetaModel
The MetaModel
contains a list of all the Element types stored within a Hiperspace and the data types of each key
and value. The MetaModel
is eternal—additional Element types are added as the schema changes, but never removed, to ensure that
older builds can still read the data that they understand.
When a Hiperspace is opened, the domain MetaModel
is compared with the MetaModel
stored in the Hiperspace to ensure the
above rules have not been compromised. All reads and writes after opening use the wire format directly, without transformation, from store
through to the client application (including browser web-assembly).
MetaMap
To support range access, the bytes in the wire format for keys are reordered to place message lengths at the end of the byte[]
for each key. This is especially important for segments (where the parent knows only the owner
part of the key) and indexes.
The MetaMap
is an ordered array of #id and mapping of key/value #id to the element #id of references. The MetaMap
is coded
in the domain assembly. This release adds the capability to remove key references without the need to create a new element type, by
regenerating the MetaMap
from the MetaModel
stored in Hiperspace.
Change
This release changes the method signatures of {KeyPath
, IndexPath
} to support a MetaMap built at load time, and
adds additional abstract methods to Hiperspace
to load and merge the MetaModel
.
The MetaModelException
exception type has been added to provide detailed diagnostics if the MetaModel
is not compatible.