SoliDB is a multi-model database in a single Rust binary.
Documents, graphs, vectors, time-series, geo and blobs share one RocksDB store and one query language, SDBQL. The figures on this page were measured while building it. Each one names the release it shipped in and links to the post that shows how it was taken.
Measured, with the method attached.
Every row is copied from a release post. Where the post says a figure is a single run, a wall-clock time from a shell loop, or was not measured at all, this table says so too. The two bars in a row share one scale.
Create 10 collections
On a copy of a 1,144-collection instance, 7.4 GB. Each create used to rewrite and fsync RocksDB's whole OPTIONS file.
10 inserts that auto-create their collection
Same instance. Wall-clock HTTP calls from a shell loop: compare the rows, do not quote them as latency.
Peak memory, 4,000-row UPSERT
Rows sent as one 500 KB bind variable, which was copied into every row's context. Before the fix it hit the 30 s timeout; after, it finished in 70 ms.
Peak RSS, 400,000 documents into 200 collections
613-collection checkpoint, prod profile, one run per variant. RocksDB's allocations moved from glibc arenas to jemalloc.
Server start, about 920 collections
Two full sweeps of every collection ran at each start. After a clean shutdown they are skipped. The new start time was not measured, so none is shown.
The same query shape for every model.
FOR … RETURN walks a graph, ranks vectors and buckets a
time series. The query text is shown without invented output: run it against
your own data with the SDBQL reference.
FOR v, e IN 1..2 OUTBOUND 'people/alice' follows FILTER e.since > 2020 RETURN { person: v.name, since: e.since }
FOR doc IN articles LET sim = VECTOR_SIMILARITY(doc.embedding, @vec) FILTER sim > 0.8 SORT sim DESC LIMIT 10 RETURN { title: doc.title, score: sim }
FOR r IN HYBRID_SEARCH("articles", "embedding_idx", "content", @vec, "machine learning", { vector_weight: 0.8, text_weight: 0.2, limit: 5 }) RETURN r
FOR e IN events COLLECT bucket = TIME_BUCKET(e.ts, '1h') AGGREGATE hits = COUNT(1) SORT bucket ASC RETURN { bucket, hits }
What it will not do for you.
Written down here so you find them before production does. Each one is also in the docs.
A checkpoint is not an off-site backup.
POST /_api/backup hard-links SST files on the same volume. It protects against a bad write or a dropped collection, not against losing the disk. On a cluster it covers the local node only. Copy it elsewhere.
Replication is eventually consistent.
Nodes replicate master to master, and writes queue for a node that is offline. Until the queue drains, two nodes can disagree about the same document.
Every query has a ceiling.
An HTTP query runs under a 30-second deadline and may materialise at most 5,000,000 intermediate rows (SOLIDB_MAX_INTERMEDIATE_ROWS). A query that needs more fails; the server keeps running.
No job queue for your application.
SoliDB schedules its own work: trigger dispatch, embedding generation, view refresh. Your background jobs and cron belong in your application framework.
One unique-index edge case remains.
Deleting the document that holds a unique value and inserting another with the same value, in one transaction, is refused. Do those in two transactions.
The 2.0 storage migration is one-way.
A 1.x binary cannot open a data directory once its collections have moved. Take a checkpoint first, and have free disk of 1.2 × your largest collection plus 1 GiB.
Recent releases, and what each one fixed.
Each release has a post that starts from the bug, not the feature. The full list is in the changelog.
Build it and run it.
RocksDB is compiled from source, so the first build needs a C++ toolchain and takes a while. The server listens on port 6745 and prints a random admin password to its log on first boot.
Client libraries: Rust, Go, Python, JavaScript (Node and browser), PHP, Ruby,
Elixir, Laravel Eloquent, and a mobile SDK. Or plain HTTP and curl.
Clients in the docs.
# Debian / Ubuntu build dependencies
$ apt-get install build-essential clang libclang-dev \
pkg-config libssl-dev libzstd-dev
$ git clone https://github.com/solisoft/solidb
$ cd solidb && cargo install --path .
$ solidb --port 6745 --data-dir ./data