Building a highly-available web service without a database

Reinventing the Database

  • Many commenters argue the system is effectively “a database”: in‑memory objects plus snapshots, transaction log, indices, and Raft replication.
  • Several point out that if you’re writing a snapshotter, WAL/transaction log, recovery, indexing, and migrations, you’ve recreated core DB functionality, often with weaker durability and fewer tools.
  • Others note this pattern is well known (Prevayler, bknr.datastore, NUMA systems, AS/400, actor/event-sourcing systems, Erlang/Orleans, HashiCorp tools).

Why Not Use Existing Databases?

  • Strong push toward “boring tech”: Postgres/MySQL/SQLite/Redis are viewed as simpler, better understood, easier to hire for, and battle-tested.
  • Multiple people say colocation (DB on same machine or Unix socket, or SQLite + replication tools like Litestream/rqlite/dqlite) would deliver similar latency without custom infra.
  • Some say Redis is ideal as a cache, not a primary durable store; others report long, successful Redis or SQLite use in production.

Complexity, Reliability, and Operations

  • Critics highlight hidden complexity: Raft round-trips, concurrency via mutexes, crash consistency, log corruption, snapshots, upgrades, and cross-version compatibility.
  • Concerns about incident response, recovery from edge cases, and implementing safe migrations without SQL tooling.
  • Some infrastructure engineers affirm the architecture is viable but emphasize upgrade and evolution hazards.

Startup Phases and Developer Productivity

  • The author’s framing: optimize for early “Explore” phase with in‑memory store; later “Expand” by adding Raft rather than rewriting to a transactional DB.
  • Several disagree, saying relational DBs actually make exploration easier due to schemas, migrations, and powerful queries; switching later is common and manageable.

Performance, Cost, and RAM

  • Debate over whether saving serialization/DB round-trips meaningfully improves performance for such workloads.
  • Some worry about RAM cost and inefficiency if replicated in-memory state grows large; others stress that modern machines can hold substantial RAM and many apps never outgrow a single box.

Attitudes Toward Experimentation

  • Many call this textbook overengineering and a maintenance nightmare for typical web apps.
  • A minority welcome experimentation and non-SQL approaches, seeing value in challenging defaults, especially when built on existing Raft and datastore libraries rather than fully from scratch.