MongrelDB: Embedded Columnar Storage with Bε-trees
DatabaseComments
The claim about reducing complexity ignores that managing Bε-trees in constrained memory often requires custom buffer pool logic to avoid thrashing. It might trade cluster complexity for significant implementation overhead in the storage engine.
This mirrors the early days of RocksDB on mobile. The theoretical write efficiency is great, but the actual memory footprint of the memtables often outweighed the gains for small-scale embedded use.
I wonder if this fits into the local-first movement... if we are seeing more apps moving logic to the edge like with DeraineDB, does having SQL and vectors in one embedded store make the sync layer much simpler... or maybe even redundant?
Hypothetically, combining SQL and vectors in one store might actually complicate the sync layer. If the vector indices are large, syncing them via delta-states would be significantly more expensive than syncing a simple relational table.
allows running complex analytical queries on the edge without exporting data to a warehouse.
Using PAX pages is a smart middle ground here. It allows for better cache locality during point lookups than a pure columnar store, which should mitigate some of those concerns about operational performance.
We saw a similar push for Bε-trees in some experimental storage engines a few years back. The issue was usually the compaction cliff, where background merges would spike CPU and I/O, killing the responsiveness of the embedded app.
If those CPU spikes are still a thing, how does that actually work on a low-power device? I don't need my system freezing for ten seconds just because the database decided to clean itself up.