Get the latest tech news

Eradicating N+1s: The Two-Phase Data Load and Render Pattern in Go


Using a two-phase data load and render pattern to prevent N+1 queries in a generalized way. Especially useful in Go, but applicable in any language.

In a large application with lots of layers, it’s not obvious from any particular query if the right prefetching is happening, and it’s easy to forget eager loads or put them in the wrong place. The system had broad limitations (e.g. only point loads could be aggregated; no complex queries were supported), but despite some gnarly code, it worked, and helped knock considerable latency off API calls. You couldn’t write a good ORM for the language if you wanted to (they do exist, but rely on a lot of untyped any shenanigans, which defeats the type advantages of Go in the first place since problems are only caught at runtime), and in the absence of one, the Go philosophy is to avoid abstraction.

Get the Android app

Or read this on Hacker News

Read more on:

Photo of pattern

pattern

Photo of n+1s

n+1s

Photo of phase data load

phase data load

Related news:

News photo

Avoiding the soft delete anti-pattern

News photo

Show HN: Browser-based knitting (pattern) software

News photo

Adobe Unveils Dress That Can Change Its Pattern On the Fly