Blog
Updates, design notes, and deep dives from the SecantusDB project.
-
The Rust server's change streams get a real oplog visibility point
Summary: The Rust server's change streams get a real oplog visibility point (v0.6.0b5).
Concurrent writers on different collections could permanently lose a change event. The Rust server's tailable cursors treated the highest minted oplog seq as the readable tail, but a seq is minted inside its writer's still-open …
-
Restore full PGO on the arm64-macOS standalone binary
Summary: Restore full PGO on the arm64-macOS standalone binary (v0.6.0b4).
The arm64-macOS
secantusd-rsbinary's on-target profile-guided optimization is working again, after a run of macos-14-runner-specific failures. Two quirks (both Linux-immune) are now handled: the PGO instrumented build drops mimalloc (whose instrumented allocator internals segfault at startup), and — the … -
Fix `drop` (and other ops) on a never-written collection under lazy shards
Summary: Fix
drop(and other ops) on a never-written collection under lazy shards (v0.6.0b3).Lazy shard creation (0.6.0b2) makes a collection's documents shard exist only once something is written to it, and the Rust server's
drop_collectionranpurge_collection_tablesunconditionally — which opened the collection's shard cursor and … -
RecordId storage on both servers, faster writes, a decoupled oplog, and an Ops Board
Summary: RecordId storage on both servers, faster writes, a decoupled oplog, and an Ops Board (v0.6.0b1).
The headline change is that both servers now use the same on-disk document layout, byte for byte. The Python server's document table is keyed by RecordId — a monotonic insertion counter — exactly as …
-
Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge
Summary: Say no like mongod: an operator-fidelity sweep, and a Rust server that clears every gauge (v0.6.0b0).
The single largest theme in this release is learning to fail correctly. Roughly sixty slices went through the query, update, and aggregation operators asking one question of each: when the argument …
-
Measured everywhere: a concurrent test suite that caught real bugs, three-way benchmarks, and self-hosted docs
Summary: Measured everywhere: a concurrent test suite that caught real bugs, three-way benchmarks, and self-hosted docs (v0.5.4b236).
SecantusDB now measures itself against real
mongodin both dimensions. The per-operation benchmark became a three-way comparison — the Rust server lands at 2.1×–4.5× of mongod, roughly 2.7 … -
SQL: user-defined range types, and enum OIDs in every plan shape
Summary: SQL: user-defined range types, and enum OIDs in every plan shape (v0.5.4b237).
A focused SQL-server release, both slices driven by the psycopg conformance gauge.
CREATE TYPE ... AS RANGEbrings user-defined range types end to end — catalog rows, the v3 extended protocol's binary codec path, and range operators … -
Point-in-time recovery, a SQL server with its own gauges, and operator parity across both servers
Summary: Point-in-time recovery, a SQL server with its own gauges, and operator parity across both servers (v0.5.4b235).
This is the largest SecantusDB release to date — a month of parallel work, 125 changelog entries. The headline capability is point-in-time recovery: every write already flowed through the oplog, and
secantusAdmin … -
`find()` with no sort now returns documents in insertion order
Summary:
find()with no sort now returns documents in insertion order (v0.5.3b13).An unsorted
find()now returns documents in insertion order, matchingmongod's natural (storage) order. Previously SecantusDB returned them in_idorder — which coincides with insertion order for the default monotonicObjectId_ids, but diverged … -
Real transactions, a pure-Python core, and the full Mongo CLI toolchain
Summary: The first PyPI release since v0.5.2b7 bundles real multi-document transactions, a Rust-free pure-Python core, richer change streams, and a wave of indexing and conformance work (v0.5.3b7).
This is the first release on PyPI since v0.5.2b7, and it carries a lot. The headline is …