Tilmann edited this page Mar 3, 2016 · 22 revisions


ZooDB is an object oriented database based on the JDO 3.0 standard. It is written mainly by Tilmann Zäschke. It is licensed under GPLv3 (GNU Public License), see file COPYING.

ZooDB is also available via maven:


Current Status

Under development, but already in use by some university projects.

Current Features

  • Works as normal database or as in-memory database.
  • Fast (4x faster than db4o using db4o's PolePosition benchmark suite).
  • Reasonably scalable, has been used successfully with 60,000,000+ objects in a 30+ GB database.
  • Maximum object count: 2^63.
  • Maximum database size depends on (configurable) page size: 2^31 * PAGE_SIZE. With default page size: 2^31 * 4KB = 8TB.
  • Crash-recovery/immunity (dual flush, no log-file required).
  • Standard stuff: commit/rollback, query, indexing, lazy-loading, transitive persistence & updates (persistence by reachability), automatic schema definition, embedded object support (second class objects).
  • Queries support standard operators, indexing, path queries, parameters, aggregation (avg, max, min), projection, uniqueness, ORDER BY, setting result classes (partial) and methods (partial).
  • Multi-user/-session capability (optimistic TX), but currently not terribly efficient.
  • Thread-safe.
  • XML export/import (currently only binary attributes).
  • Some examples are available in the 'examples' folder.
  • Open source (GPLv3).

Note that some features may be available in the latest snapshot only.

Current Limitations

  • Schema evolution is ~90% complete (updating OIDs is not properly supported, no low level queries) --> Queries don't work with lazy evolution.
  • No backup (except copying the DB file).
  • Single process use only (no stand-alone server).
  • JDO only partially supported:
    • Some query features not supported: group by, range, variables, imports, setting result classes (partial).
    • No XML config or Annotations; configuration only via Java API.
    • Manual enhancement of classes required (insert activateRead()/activateWrite() & extend provided super-class).
  • Little documentation (some example code), but follows JDO 3.0 spec.





Tobias Gmünder (profiling) Jonas Nick (prefix-sharing index) Bogdan Vancea (prefix-sharing index) Tilmann Zäschke

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.