This repository provides the dqlite
C library (libdqlite), which can be used
to expose a SQLite database over the network and replicate it across a cluster
of peers, using the Raft algorithm.
Note that at the moment libdqlite implements only the client/server networking code, which allows a client to connect to a dqlite node and perform SQL queries using a dedicated wire protocol. The code that implements Raft-based replication is currently written in Go and available in the go-dqlite repository.
It should be possible to compile the go-dqlite
Go package as shared library
and hence use libdqlite
with any programming language with C
bindings. However, the current focus of dqlite is to be an embedded distributed
database for Go applications.
See go-dqlite for more information.
- Asynchronous single-threaded server implemented on top of libuv
- Custom wire protocol optimized for SQLite primitives and data types
- Raft replication is not built-in, consumers need to provide an implementation
This is beta software for now, but we'll get to rc/release soon.
If you are on a Debian-based system, you can install daily built packages from a Launchpad PPA:
sudo add-apt-repository ppa:dqlite-maintainers/master
sudo apt-get update
sudo apt-get install libsqlite3-dev libdqlite-dev
To build libdqlite
from source you'll need:
- A reasonably recent version of libuv (v1.8.0 or beyond).
- A patched version of SQLite with support for WAL-based replication.
Your distribution should already provide you a pre-built libuv shared library.
As for the patched version of SQLite, the base line is currently version 3.24.0 and the changeset can be viewed here.
To build it:
git clone --depth 100 https://github.com/CanonicalLtd/sqlite.git
git log -1 --format=format:%ci%n | sed -e 's/ [-+].*$//;s/ /T/;s/^/D /' > manifest
git log -1 --format=format:%H > manifest.uuid
./configure --enable-replication
make
sudo make install
Once libuv and SQLite are installed, to in order to build the dqlite shared library itself you can run:
autoreconf -i
./configure
make
sudo make install