Data-Oriented Design (2018)

tie-in1 pts0 comments

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

data oriented design normal form contents

Related Articles