Benchmarks
Real performance numbers from DRAVN's benchmark suite. Tested with 1M rows of synthetic USA weather data across PostgreSQL, SQLite, and Kafka on a single machine.
Execution Mode Comparison
100,000 rows — aggregate by state and year. Same source, same target, same transform. The only difference is where the work happens.
PostgreSQL Batch Write Performance
100,000 rows written to PostgreSQL with different batch sizes. Multi-row INSERT with transactions.
| Batch Size | Duration | Rows/sec | Speedup |
|---|---|---|---|
| 1 (row-by-row) | 47.38s | 21 | 1x |
| 50 | 89.22s | 1,121 | 53x |
| 100 | 45.31s | 2,207 | 105x |
| 500 | 8.03s | 12,446 | 593x |
| 1,000 | 5.33s | 18,747 | 893x |
| 5,000 | 3.57s | 27,977 | 1,332x |
Source Read Speed
100,000 rows read from different source types into memory.
Streaming 1M Rows
1,000,000 rows streamed with backpressure at different chunk sizes. Memory stays flat — only one chunk in memory at a time.
| Chunk Size | Duration | Rows/sec | Peak Memory |
|---|---|---|---|
| 100 | 109.63s | 9,121 | 580 MB |
| 500 | 34.43s | 29,047 | 579 MB |
| 1,000 | 18.20s | 54,942 | 586 MB |
| 5,000 | 3.33s | 300,341 | 586 MB |
SQLite Performance (Lite Mode)
SQLite with WAL mode — the foundation of DRAVN Lite. No external database needed.
Write Batch Size Comparison
Kafka Streaming
Apache Kafka 7.6 in KRaft mode. Produce, consume, and end-to-end pipeline throughput.
| Test | Messages | msg/sec |
|---|---|---|
| Produce batch 50 | 10,000 | 19,996 |
| Produce batch 1000 | 10,000 | 16,919 |
| Consume | 10,000 | 2,192 |
| E2E produce+consume | 10,000 | 2,642 |
| Kafka → PostgreSQL | 10,000 | 2,414 |
Concurrent Pipeline Stress
Methodology
All benchmarks run on a single machine using DRAVN's built-in benchmark suite (npm run benchmark:full). Data is 1M rows of synthetic USA weather station readings (14 columns, ~258 MB JSON).
PostgreSQL 16 and Redis 7 run in Podman containers. SQLite uses better-sqlite3 with WAL mode. Kafka 7.6 runs in KRaft mode (no ZooKeeper). Timing uses performance.now(); memory via process.memoryUsage().heapUsed.
Numbers will vary by hardware, network, and data shape. Run the benchmark suite on your own infrastructure for accurate results.