Embedded in-memory search for Java

Search fast. Travel light.

JemDB puts structured search inside your application. No extra cluster. No network hop. No tiny distributed-systems rodeo just to filter a catalogue.

1 JVMSearch where the app lives
0 network hopsBetween app and engine
1 writerMany concurrent readers
Java 17+Plain Java, no framework required

A focused tool, not a new religion.

JemDB handles the structured-search work that is painful to repeat with collection scans, without pretending to be a SQL database, a document store, or a replacement for every search server ever built.

01 / STORE

Primitive-first

Column-oriented in-memory storage, compact repeated values, and bitmap indexes where they earn their keep.

02 / SEARCH

Made for real filters

Exact values, alternatives, numeric and date ranges, bounded sorting, primary keys, limits, and geographic bounds.

03 / SERVE

Results without a souvenir shop

Reusable typed cursors help produce JSON, CSV, map tiles, or whatever comes next without allocating a fresh object for every row.

The short version, in Java.

Create a schema, load complete rows, build a typed query, and stream the result. JemDB stays close to the metal without making application code feel like archaeology.

  • String, integer, long, boolean, enum, date, and location data
  • Integer, enum, and geographic partitioning
  • Ascending and descending bounded sorting
  • String, integer, and long primary keys
  • Strict configuration and query validation
HelloJemDb.java
var db = new JemDb(
  JemDbConfig.builder()
    .addStringField("id")
    .addBooleanField("available")
    .setPrimaryKey("id")
    .build());

var available = db.booleanField("available");
var query = Query.builder()
  .where(available, true)
  .build();

try (var rows = db.query(query)) {
  while (rows.next()) { /* ship it */ }
}
How we got here

Built from years of real search work.

JemDB did not begin as a whiteboard exercise. It grew from years spent building and running search for vacation rentals around the world—fast filters, map regions, many readers, and pricing that is far less simple than a single number.

Those hard-won lessons are now becoming a general engine for many kinds of structured search. Vacation-rental-specific ideas can remain private extensions. The reusable search machinery belongs in JemDB.

The basic approach is shaped by demanding, real-world vacation-rental searches.

Search, storage, queries, partitions, cursors, and calculated fields become a reusable Java core.

Public examples, demos, one-million-row datasets, and reproducible ArrayList and Elasticsearch comparisons arrive.

The core is tested and the first protected, free-to-use binary preview is being packaged for GitHub Releases.

Bring your data. Keep your server count.

The preview is not pretending to be finished. It is ready to be tried, measured, questioned, and improved—with the first public binary release coming soon.