Data-Oriented Design
Next: Contents<br>Contents
Online release of Data-Oriented Design :<br>This is the free, online, reduced version. Some inessential chapters are excluded from this version, but in the spirit of this being an education resource, the essentials are present for anyone wanting to learn about data-oriented design.<br>Expect some odd formatting and some broken images and listings as this is auto generated and the Latex to html converters available are not perfect. If the source code listing is broken, you should be able to find the referenced source on github. If you like what you read here, consider purchasing the real paper book from here, as not only will it look a lot better, but it will help keep this version online for those who cannot afford to buy it. Please send any feedback to support@dataorienteddesign.com
Data-Oriented Design
Richard Fabian
Contents<br>Data-Oriented Design
It's all about the data<br>Data is not the problem domain<br>Data and statistics<br>Data can change<br>How is data formed?<br>The framework<br>Conclusions and takeaways
Relational Databases
Complex state<br>The framework<br>Normalising your data<br>Normalisation
Primary keys<br>1st Normal Form<br>2nd Normal Form<br>3rd Normal Form<br>Boyce-Codd Normal Form<br>Domain Key / Knowledge<br>Reflections
Operations<br>Summing up<br>Stream Processing<br>Why does database technology matter?
Existential Processing
Complexity<br>Debugging<br>Why use an if<br>Types of processing<br>Don't use booleans<br>Don't use enums quite as much<br>Prelude to polymorphism<br>Dynamic runtime polymorphism<br>Event handling
Component Based Objects
Components in the wild<br>Away from the hierarchy<br>Towards managers<br>There is no entity
Hierarchical Level of Detail
Existence<br>Mementos<br>JIT mementos<br>Alternative axes
The true measure<br>Beyond space
Collective LOD
Searching
Indexes<br>Data-oriented Lookup<br>Finding low and high<br>Finding random
Sorting
Do you need to?<br>Maintaining<br>Sorting for your platform
Optimisations
When should we optimise?<br>Feedback
Know your limits
A strategy
Define the problem<br>Measure<br>Analyse<br>Implement<br>Confirm<br>Summary
Tables<br>Transforms<br>Spatial sets<br>Lazy evaluation<br>Necessity<br>Varying length sets<br>Joins as intersections<br>Data-driven techniques
SIMD
Structs of arrays
Helping the compiler
Reducing order dependence<br>Reducing memory dependency<br>Write buffer awareness<br>Aliasing<br>Return value optimisation<br>Cache line utilisation<br>False sharing<br>Speculative execution awareness<br>Branch prediction<br>Don't get evicted<br>Auto vectorisation
Maintenance and reuse
Cosmic hierarchies<br>Debugging
Lifetimes<br>Avoiding pointers<br>Bad State
Reusability<br>Reusable functions<br>Unit testing<br>Refactoring
What's wrong?
The harm<br>Mapping the problem<br>Internalised state<br>Instance oriented development<br>Hierarchical design vs change<br>Divisions of labour<br>Reusable generic code
About this document ...
Richard Fabian<br>2018-10-08