Here are the numbers.
On our one-million-car workload, JemDB is fast. Sometimes surprisingly fast. It is also a focused in-memory engine being compared with tools that make different trade-offs. Both things can be true.
JemDB vs. a plain ArrayList
Apple M2, Java 21, fixed 2 GiB heap, one million generated cars. The public programs run the same searches and validate their results.
| Workload | JemDB median | ArrayList median |
|---|---|---|
| Toyota, sorted by price | 108.42 µs | 10.13 ms |
| Electric SUVs, count | 268.63 µs | 4.09 ms |
| Electric SUVs, by mileage | 294.04 µs | 6.66 ms |
| Volkswagen, top 100 | 71.25 µs | 10.62 ms |
The list wins the loading race: 671 ms versus 1,272 ms. JemDB retained about 189 MiB for this schema and indexes—roughly 9 MiB less than the object list after repeated make strings moved to an enum field. A custom collection with hand-built indexes could perform very differently.
Same Spring service. Different search engine.
The controller, response objects, dataset, and validated JSON fingerprints were shared. One service embedded JemDB; the other called Elasticsearch through its official Java client.
| External client threads | JemDB requests/sec | Elasticsearch requests/sec |
|---|---|---|
| 1 | 2,686 | 460 |
| 8 | 12,431 | 2,346 |
Elasticsearch ran separately in Docker with more total memory. The comparison includes the HTTP hop from Spring to Elasticsearch, because that is precisely the architecture being compared. Elasticsearch brings persistence, replication, full-text relevance, aggregations, and cluster management. JemDB does not.
The part we actually care about
The attractive result is not a universal “we beat Elasticsearch” headline. It is that a Java service with the right workload may get excellent latency and throughput while removing an entire server, a network boundary, a deployment, and a thing that can page you at an unfriendly hour.
For small datasets, a normal Java structure will often be faster to load and perfectly sufficient. For full-text search, durable distributed storage, or datasets that do not fit in memory, bring the tool made for that job. Horses for courses; fewer horses when one will do.
Do not trust the poster. Run the benchmark.
The data generator, programs, settings, raw methodology, and qualifications are public.