Reproducible benchmark suite comparing Storm against plain JDBC, Hibernate ORM, jOOQ, Exposed, and Jimmer on realistic PostgreSQL workloads. JMH with Testcontainers; identical schema, data, driver, and connection pool for every library.
See METHODOLOGY.md for what is measured, the fairness rules, and how to interpret results.
| Workload | Shape |
|---|---|
singleRowById |
One row by primary key, foreign key left as a reference |
joinWithMapping |
100 rows over a 3-table join, object graph materialized |
projection |
Same join, 3 columns into a flat row type |
batchInsert |
100 rows in a transaction, generated keys returned |
objectGraph |
50 parents with their child collections (N+1-prone shape) |
Requirements: JDK 21, Docker.
scripts/run.sh # full suite (~30 min), merged results in results/
scripts/run.sh --quick # smoke run (~5 min), numbers are indicative only
./gradlew :bench-storm:jmh # one library, self-containedEach bench-<library> module is a standalone JMH project; bench-common holds the schema,
the deterministic dataset, and the container lifecycle. Results land in
results/combined.json and results/summary.md.
Dependency versions are pinned in gradle/libs.versions.toml.
Until Storm 1.13.0 reaches Maven Central, Storm artifacts resolve from mavenLocal().
Per-release results are produced by the benchmark GitHub Actions workflow and published
with the release notes, including runner type and exact versions. No numbers are committed
to this repository; run the suite to produce your own.
Improvements to any implementation are welcome, in particular from users of the compared libraries: if an implementation is not what the library's documentation recommends, that is a bug. Please include a pointer to the documentation in question.
Apache License 2.0, see LICENSE.txt.