20260129
Conclusion
Phase 1 of the DataLens R&D project has progressed from purely theoretical experimentation to practical, exploratory testing. The system was successfully ported from Unreal Engine 5.6 on Windows to Unreal Engine 5.7 on Linux, exposing low-level implementation and platform-specific issues. These confirm the necessity of precise coding discipline and careful memory/data layout for the DataStore and DataLens APIs.
Additionally, the DataView insert functionality was revised to support join-based updates, inspired by TSQL. Developers can now define how view cache modifications propagate to target DataStores during the DataView churn phase. The system uses precompiled intermediate expression objects, influenced by Microsoft Intermediate Language (MIL), allowing CPU-cache-aware updates and efficient CRUD-style operations. Memory reuse optimisations reduce unnecessary allocation or deletion.
Preparations for larger-scale, live validation testing are underway. While prior testing used synthetic datasets in controlled environments, game teams have identified real-world use cases for DataLens integration. This will enable evaluation of API usability and DataStore performance in live simulation scenarios. Only research-related work—system design, experimentation, test creation, and result analysis—is logged as R&D; implementation in game projects (Túatha: Shattered and Túatha: Wayfinder) is treated as production.
Detailed Notes and Thought Process
Exploratory R&D Focus
This commit represents an experimental effort focused on DataLens, specifically the interaction between normalised, CPU-centric, cache-sensitive DataStores and game-specific DataViews.
Technical uncertainty exists in efficiently mapping, filtering, and computing between underlying stores and views while preserving correctness, simplicity, and memory efficiency.
Objectives and Technical Uncertainty
Investigate optimal structures bridging low-level DataStore (row-major, cache-aware) and high-level DataView abstractions.
Explore approaches to pivoting, joining, and filtering rows for DataView construction with minimal allocations and high performance.
Examine inline evaluation of calculated fields and predicates to reduce intermediate data structures and redundant memory operations.
Address uncertainty in supporting joins, filtering, and expression evaluation in a unified pipeline given differing DataStore/DataView requirements.
Changes Implemented
Refractor
RefreshViewto inline join resolution, predicate evaluation, and row materialisation. Calculated fields are evaluated during row materialisation, avoiding temporary buffers.Preserved memory efficiency by delaying pre-allocation of candidate row lists.
Implemented
AppendEmptyRowfor correct stride and row pointer handling.Introduced
ResolveJoinsInlineandEvaluatePredicatesInlineto explore per-row, inline computation strategies.Adjusted
DataLensValueTypeUtils::Copyto reference column types correctly.Laid groundwork for grouping and aggregate support; full implementation deferred due to potential cache conflicts.
Current State
RefreshViewsupportsSELECToperations, calculated fields, joins between multiple stores, and predicate filtering (WHERE).Grouping and aggregate systems remain stubs; further exploration is needed for safe integration with inline evaluation and cache construction.
Inline evaluation reduces temporary allocations and provides a clear path for optimising cache-sensitive DataStore/DataView interactions.
Next Steps / Future Exploration
Safely integrate grouping and aggregate calculations without violating cache assumptions.
Benchmark inline evaluation against previous candidate-row approaches to quantify performance gains.
Explore write-back or update strategies for DataViews with inline calculated fields and aggregated columns.
R&D Context
The work qualifies as experimental development due to technical uncertainty. Multiple approaches were tested to determine optimal methods for row mapping, join resolution, and inline evaluation—solutions are not readily deducible by a competent developer without systematic experimentation.
Last updated