| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-01-24 | 2.1 kB | |
| v0.2.4 source code.tar.gz | 2026-01-24 | 1.7 MB | |
| v0.2.4 source code.zip | 2026-01-24 | 2.0 MB | |
| Totals: 3 Items | 3.7 MB | 0 | |
What's New in v0.2.4
This release focuses on memory optimization and MVCC performance, reducing memory footprint by 33% for core data structures and introducing a copy-on-write B+ tree for O(1) MVCC snapshots.
Performance Improvements
CowBTree for O(1) MVCC Snapshots
- Replace RwLock<BTreeMap> with copy-on-write B+ tree enabling structural sharing
- Readers clone tree root (atomic increment) then iterate without holding locks
- Dual refcount system for correct concurrent drop coordination
- Rightmost split optimization for sequential inserts
Value Size Reduction (24 → 16 bytes, 33% smaller)
- Redesigned SmartString with packed struct and tag byte for niche optimization
- Extended CompactArc to support DSTs (str, [T]) with thin pointers (8 bytes)
- Option<Value> also 16 bytes with no discriminant overhead
MVCC Memory Footprint Reduction
- Remove row_id from RowVersion (8 bytes saved per version)
- Remove chain_depth from VersionChainEntry (8 bytes saved)
- Use NonZeroU64/NonZeroUsize for arena indices (RowIndex: 24 → 16 bytes)
- V2 persistence format without redundant row_id field (backward compatible)
Subquery Caching (5.3x faster) - Cross-query subquery caching with table-based invalidation - Cache entries track referenced tables for selective invalidation on DML
Bug Fixes
- Fix double-free in CowBTree internal node merge
- Fix dirty read vulnerability:
Database::clone()now creates independent executor - Fix join projection column ordering with ColumnSource enum
- Fix ORDER BY + LIMIT with Hash index fallback Thanks to @nhansiromeo
- Fix FULL OUTER JOIN null row handling in nested loop join
Other Changes
- Migrate Value-keyed maps to AHash for HashDoS resistance
- Simplify Row storage from 3 variants to 2 (Shared/Owned)
- Add LRU bounds to thread-local caches (scalar/IN subquery: 128, semi-join: 256)
- Add comprehensive SAFETY comments to unsafe blocks
- Panic safety fixes in CompactVec (clone, extend, from_iter)
Full Changelog: https://github.com/stoolap/stoolap/compare/v0.2.3...v0.2.4