I tried out rqlite today, a "lightweight, distributed relational database, which uses SQLite as its storage engine". It uses the Raft consensus algorithm to allow multiple SQLite instances to elect a leader and replicate changes amongst themselves.
rqlite asks you to use its own custom HTTP API - but I wanted to try running it against Datasette. rqlite author Philip O'Toole confirmed that this should work provided any writes go through the API - each node can be configured to write to an on-disk database file which Datasette can then read from (the default is to use in-memory databases and an on-disk Raft log).
Here's how I got that working on my macOS laptop. I used the latest macOS binary from https://github.com/rqlite/rqlite/releases (
rqlite is written in Go and provides pre-complied binaries for different systems).
cd /tmp curl -L https://github.com/rqlite/rqlite/releases/download/v5.7.0/rqlite-v5.7.0-darwin-amd64.tar.gz \ -o rqlite-v5.7.0-darwin-amd64.tar.gz tar xvfz rqlite-v5.7.0-darwin-amd64.tar.gz cd rqlite-v5.7.0-darwin-amd64
I started the first node like this:
./rqlited -on-disk ~/node.1
This created a SQLite database file in
~/node.1/db.sqlite which I could open with Datasette.
Note that the
-on-disk option has to come before the
~/node.1 - if it comes afterwards it silently fails to take effect.
I created a table and inserted a record using the client binary like this:
./rqlite CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT) INSERT INTO foo(name) VALUES("fiona")
Running Datasette against
~/node.1/db.sqlite confirmed the table had been created.
Then I started a second node like this:
./rqlited -on-disk -node-id 2 -http-addr localhost:4003 \ -raft-addr localhost:4004 -join http://localhost:4001 \ ~/node.2
Since it was running on the same machine I had to pick different ports for it, then tell it to join the existing cluster at
This created a database file at
I confirmed that this database had the
foo table in it, then inserted another row and watched as both of my database files were updated with the new record.
Created 2020-12-28T11:22:16-08:00, updated 2020-12-28T12:25:45-08:00 · History · Edit