Skip to content

feat: group commit mode for ~12x faster writes — v0.5.0#8

Merged
mbocevski merged 1 commit into
mainfrom
feat/group-commit
Apr 9, 2026
Merged

feat: group commit mode for ~12x faster writes — v0.5.0#8
mbocevski merged 1 commit into
mainfrom
feat/group-commit

Conversation

@mbocevski

Copy link
Copy Markdown
Contributor

Summary

writeMode: 'group' buffers operations in memory and flushes as a single disk write. ~12x faster than immediate mode for sustained writes.

Configuration

await store.open(dir, {
  writeMode: 'group',      // default: 'immediate'
  groupCommitSize: 50,     // flush when buffer reaches N ops
  groupCommitMs: 100,      // flush after N ms idle
});

Safety

  • Forced to immediate when agentId is set (multi-writer). Logs warning.
  • Buffer flushed on close(), compact(), and explicit flush().
  • Timer ensures buffer is written within groupCommitMs even with few ops.

Benchmark

500 individual writes: immediate=12ms, group=1ms, 12.4x speedup.

Test plan

175 tests (was 168). 7 new group commit tests:

  • Buffer flushes on size threshold
  • Buffer flushes on timer
  • close() flushes buffer
  • Explicit flush() works
  • Undo works with group commit
  • Forced to immediate with agentId
  • Performance comparison (12.4x speedup verified)

writeMode: 'group' buffers operations in memory, flushes on:
- Buffer reaches groupCommitSize (default 50)
- Timer hits groupCommitMs (default 100ms)
- Explicit flush(), close(), or compact()

Forced to 'immediate' when agentId is set (multi-writer safety).
Logs warning if user tries group mode with multi-writer.

Benchmark: 500 writes — immediate 12ms, group 1ms, 12.4x speedup.

175 tests (was 168).
@mbocevski mbocevski force-pushed the feat/group-commit branch from 6b3724b to 1877ea1 Compare April 9, 2026 20:39
@mbocevski mbocevski merged commit 410c593 into main Apr 9, 2026
2 checks passed
@mbocevski mbocevski deleted the feat/group-commit branch April 9, 2026 20:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant