BP-03 // DISASTER RECOVERY

Litestream Continuous S3 Replication Without Surprise AWS PUT API Bills

SQLiteEdge Litestream guide: how shadow read locks ship LZ4-compressed WAL frames every second and why a $6/mo MinIO slice avoids metered S3 PUT fees.

MODELED DESIGN TARGET
1s RPO
READ PATH / RPO TARGET
$0 S3 PUT Tax
REFERENCE NVME PROFILE
$6 MinIO Vault + VPS

A single-node SQLite VPS without continuous off-site streaming is a single point of hardware failure; paired with Litestream, it achieves ~1-second Recovery Point Objective (RPO) rivaling managed multi-AZ RDS. However, syncing every 1 second triggers 2.59 million S3 PUT checks/uploads per billing cycle per database—making fixed-price self-hosted MinIO/Garage on a $6/mo InterServer 1TB slice dramatically cheaper than metered AWS S3.

In our SQLiteEdge BP-03 reference guide, every configuration rule below follows official SQLite 3.46 documentation and public vendor specifications retrieved 2026-11-12.

SQLiteEdge Architecture Rules for Litestream Continuous 1s S3 & MinIO Replication

  1. Litestream maintains a shadow read transaction so SQLite never overwrites WAL frames before Litestream copies, compresses (LZ4), and uploads them.
  2. Watch out for AWS S3 Class-A PUT math: 100 tenant databases syncing at 1s intervals can generate 30M+ PUT requests per billing cycle ($150+/mo in pure API fees on AWS S3) vs $0 API fees on a $6/mo InterServer MinIO slice.
  3. Configure snapshot-interval: 6h and retention: 168h so disaster recovery restore downloads one base snapshot plus at most 6 hours of incremental WAL segments.
  4. Automate a daily restore verification cron on your backup node (`litestream restore` + `PRAGMA quick_check;`)—untested backups are not backups.

SQLiteEdge Reference Snippet: /etc/litestream.yml + Automated Restore Drill Script

/etc/litestream.yml + Automated Restore Drill Script
dbs:
  - path: /var/lib/app/production.sqlite3
    monitor-interval: 1s
    checkpoint-interval: 1m
    min-checkpoint-page-count: 1000
    max-checkpoint-page-count: 10000
    replicas:
      - type: s3
        bucket: sqliteedge-dr-vault
        path: cluster-01/production.sqlite3
        endpoint: https://minio-vault.yourdomain.com
        force-path-style: true
        sync-interval: 1s
        snapshot-interval: 6h
        retention: 168h

# Automated Disaster-Recovery Verification Command:
# litestream restore -o /tmp/verify.db s3://sqliteedge-dr-vault/cluster-01/production.sqlite3
# sqlite3 /tmp/verify.db "PRAGMA integrity_check;"

SQLiteEdge Modeled Profile & Tariff Table (BP-03)

Public vendor prices retrieved 2026-11-12 (promotional and renewal rates may change at checkout); throughput figures reflect theoretical single-queue sizing models rather than unarchived lab claims.

Replication Target1 DB (1s Sync)200 Tenant DBs (1s Sync)Egress on Full Restore
AWS S3 Standard ($0.005 / 1k PUTs)$14.20/mo$168.00+/mo$0.09 / GB Egress Fee
Google Cloud Storage Standard$14.80/mo$175.00+/mo$0.12 / GB Egress Fee
InterServer $6/mo 1TB Price-Lock MinIO$6.00/mo flat$6.00/mo flat$0.00 / GB Included

SQLiteEdge Spec-Matched NVMe & S3 Targets for BP-03

Open this BP-03 workload preset inside the SQLiteEdge PRAGMA Studio →

SQLiteEdge Engineering FAQ for BP-03

  • What happens to my SQLite database if the S3/MinIO backup endpoint goes offline temporarily?

    Your primary app keeps serving reads and writes at full local NVMe speed, while the -wal file temporarily grows on local disk because Litestream holds its checkpoint guard. Always monitor -wal file size and keep 2.5x disk headroom.

  • How fast can I recover a 50 GB SQLite database on a fresh Vultr or Hostinger VPS?

    Over a 1Gbps–10Gbps datacenter port, litestream restore pulls the latest LZ4-compressed snapshot + WAL tail and boots a live replacement node in ~45 to 90 seconds.