The implementation of range queries (#609) has put a lot of stress on the terminology used within the store.
While it already wasn't that great before, it just completely broke down; making it really really hard to understand what's going on in some cases.
Here are some notes I took to make things better / more understandable:
// TODO(cmc): We desperately need to work on the terminology here:
//
// - `TimeIndex` is a vector of `TimeInt`s.
// It's the primary column and it's always dense.
// It's used to search the datastore by time.
//
// - `ComponentIndex` (currently `SecondaryIndex`) is a vector of `ComponentRowNr`s.
// It's the secondary column and is sparse.
// It's used to refine the primary time-based search for a specific component.
//
// - `ComponentRowNr` (currently `RowIndex`) is a row offset into a component table.
// It only makes sense when associated with a component name.
// It is absolute.
// It's used to fetch actual data from the datastore.
//
// - `IndexRowNr` is a row offset into an index bucket.
// It only makes sense when associated with an entity path and a specific time.
// It is relative per bucket.
// It's used to tiebreak results with an identical time, should you need too.
The implementation of range queries (#609) has put a lot of stress on the terminology used within the store.
While it already wasn't that great before, it just completely broke down; making it really really hard to understand what's going on in some cases.
Here are some notes I took to make things better / more understandable: