A

Doubling the Sorting Speed of Postgres Network Types with Abbreviated Keys

https://brandur.org/sortsupport-inet

A few months ago, I wrote about how SortSupport works in Postgres to vastly speed up sorting...

A

Scaling a High-traffic Rate Limiting Stack with Redis Cluster

https://brandur.org/redis-cluster

Redis is the often unspoken workhorse of production. It’s not often used as a primary data...

A

Tweeting for 10,000 Years: An Experiment in Autonomous Software

https://brandur.org/10000-years

Deep inside a mountain in Texas, a clock is being built. Unlike other clocks, this one is...

A

How to Manage Connections Efficiently in Postgres, or Any Database

https://brandur.org/postgres-connections

You start building your new project. You’ve heard good things about Postgres, so you choose it...

A

Sequences: A Modest, Contra-garden Travel Project

https://brandur.org/sequences-project

Many of us in technology-adjacent circles have been grumbling for years about the continued...

A

How Postgres Makes Transactions Atomic

https://brandur.org/postgres-atomicity

Atomicity (in the sense of “ACID”) states that for a series of operations performed against a...

A

Implementing Stripe-like Idempotency Keys in Postgres

https://brandur.org/idempotency-keys

In APIs idempotency is a powerful concept. An idempotent endpoint is one that can be called any...

A

Redis Streams and the Unified Log

https://brandur.org/redis-streams

Years ago an article came out of LinkedIn about the unified log, a useful architectural pattern...

A

Living APIs, and the Case for GraphQL

https://brandur.org/graphql

It’s hard to read exactly where GraphQL stands in the API world right now. Available publicly...

A

A Missing Link in Postgres 11: Fast Column Creation with Defaults

https://brandur.org/postgres-default

If you read through the release notes for upcoming Postgres 11, you might see a...

A

SortSupport: Sorting in Postgres at Speed

https://brandur.org/sortsupport

Most often, there’s a trade off involved in optimizing software. The cost of better performance...

A

Building a Robust Live Reloader with WebSockets and Go

https://brandur.org/live-reload

For the last couple weeks I’ve been making a few upgrades to the backend that generates this...

A

Pseudo-HTML and Pidgin CSS: Building an Email Newsletter

https://brandur.org/newsletters

After a recent trip to Portland, I decided to try writing a newsletter. I don’t post on Facebook...

A

The Limits of Copy-on-write: How Ruby Allocates Memory

https://brandur.org/ruby-memory

Anyone who’s run Unicorn (or Puma, or Einhorn) may have noticed a curious phenomena. Worker...

A

Using Atomic Transactions to Power an Idempotent API

https://brandur.org/http-transactions

The software industry as a whole contains a lot of people doing a lot of different things, but...

A

Transactionally Staged Job Drains in Postgres

https://brandur.org/job-drain

Background jobs are one of the most common patterns in web programming, and for good reason....

A

Should You Build a Webhooks API?

https://brandur.org/webhooks

The term “webhook” was coined back in 2007 by Jeff Lindsay as a “hook” (or callback) for the...

A

Scaling Postgres with Read Replicas & Using WAL to Counter Stale Reads

https://brandur.org/postgres-reads

A common technique when running applications powered by relational databases like Postgres,...

A

Speed and Stability: Why Go is a Great Fit for Lambda

https://brandur.org/go-lambda

A few days ago in a move foreshadowed by a hint at Amazons’ re:Invent conference late last year,...

A

Touring a Fast, Safe, and Complete(ish) Web Service in Rust

https://brandur.org/rust-web

For years now, I’ve been having a crisis of faith in interpreted languages. They’re fast and fun...

View more articles