New Configuration Guide for rqlite

rqlite is a lightweight, user-friendly, open-source, distributed relational database. It’s written in Go and uses SQLite as its storage engine.

I’ve added a new Configuration Guide for rqlite, which has been regularly requested. rqlite has many options and although the defaults work for the vast majority of use cases, occasionally rqlite requires some operational tweaks.

Faster Reads, Same Guarantees: Linearizable Consistency in rqlite 8.32

rqlite is a lightweight, open-source, distributed relational database. It’s written in Go, built on the Raft consensus algorithm, and uses SQLite as its storage engine. With release 8.32, rqlite now supports fast, reliable, Linearizable reads—delivering strong consistency guarantees without the performance costs of the past.

Distributed systems present many challenges, but there is only one really hard problem: ensuring a consistent state across nodes, even in the face of network partitions, machine failures, or unexpected bugs. And a closely related requirement is ensuring up-to-date data reads — both requirements are the essential challenges that every distributed database must address.

Continue reading “Faster Reads, Same Guarantees: Linearizable Consistency in rqlite 8.32”

Concurrency Control in Go: Inside rqlite’s Custom Synchronization Primitives

rqlite is a lightweight, open-source, distributed relational database written in Go, which uses SQLite as its storage engine.

Concurrency and synchronization are at the heart of any database — and distributed systems too. Today, I’d like to share the set of synchronization primitives and race-free data structures I’ve developed for rqlite, and explain how I use them to program key aspects of the database. They might even be useful to others confronted with similar requirements.

Continue reading “Concurrency Control in Go: Inside rqlite’s Custom Synchronization Primitives”