Skip to content
Javers docs0.2

Benchmark evidence

Latest stable Based on Javers release 0.2.1

The 0.2 manual treats benchmarks as bounded evidence, not product rankings. A useful result records the workload, environment, command, metric direction, representative values, and the conditions under which another run may disagree.

Release 0.2.1 contains one benchmark artifact:

It was generated by the released EnversComparisonBenchmarkTest. Later benchmark modules or result files are outside this manual’s release boundary.

Start with the question the workload actually answers. This artifact compares a small H2 persistence shape for Hibernate Envers and JaVers + Exposed. It measures insert, update, and one audit lookup in milliseconds per operation. Lower is better. It does not measure the Kafka-to-Redis projection, production PostgreSQL, end-to-end command latency, throughput under concurrency, allocation, startup, or recovery.

Then check the environment and repetition count. This run used Java 21.0.11 on macOS aarch64. The artifact records warmupIterations=5 and forty measured operations per scenario, but the released test applies those five warmup saves only before the insert measurement. Update prepares forty orders outside the timer, then measures forty updates; audit-query reuses those updated orders without a separate warmup. These are local documentation measurements, not a statistically complete performance study.

Finally, use the values to form a local hypothesis. In this run Envers was faster in all three narrow scenarios. That is evidence to investigate cost for the same workload; it is not evidence that one audit model is universally better. The two implementations expose different modeling and integration capabilities.

The artifact records this exact command:

Terminal window
./gradlew :javers-exposed-ddd:test --tests '*EnversComparisonBenchmarkTest*' --no-configuration-cache --no-build-cache --no-parallel --console=plain

Run it on the target JDK, operating system, database, data volume, and query shape before making a performance decision. Keep the raw artifact, compare distributions across repeated forks, and separate setup time from steady-state operation if the decision is material.

Continue with the detailed JaVers + Exposed and Envers comparison and the released order example.