Slides from my DroidconUK talk:

This project was originally built to basically show how much faster GreenDAO is than ORMLite. The speed difference was mostly caused by putting a foreign collection on the ORMLite entity, and not on the GreenDAO entity, so ORMLite was WAY slower in measurements. As a general rule, benchmarks tend to show the result the author wants (sorry, benchmark person).

I was the original ORMLite Android adapter author (not the ORMLite author, which was WAY more work). Since I found this benchmark, I've been using it to demostrate relative speed of different ORMs. I've been using this one mostly toung in cheek. It was originally designed with a huge bias to show what was desired, so ha ha. I've tried to remove as much bias as possible, but if experts in the target ORMs understand them better, please update.

The benchmark only tests basic table marshalling. Testing foreign object fetching is tricky because different frameworks do it differently (or don't at all). However, if you understand which mechanism is used, you can pretty much extrapolate what the performance will be like.

In general, source-gen frameworks are 2x reflection frameworks. Ironically, considering the initial goal, GreenDAO is by far the slowest source gen (not including SquiDB, which is slower than some reflection frameworks).

Performance isn't everything, though. Whatever. Here's the original README. The numbers I ran were on Lollipop, which may explain why relfection vs source gen performance is much better now.

Currently tested frameworks







SQLite (optimized)


Squeaky (immutables)




Got a pull request for an update to greed dao, and a request to refresh realm with a new version. Will work on getting that checked in and pushed to store asap.

Everything below this is from the original benchmark. Its probably old.


ORM-Benchmark is an Android application built in Eclipse that benchmarks the following against each other:

The benchmark runs the following tasks:

Each task is run 5 times, and the application reports the average time for each in milliseconds.

Sample Output

Building and running the ORM-Benchmark project produces output similar to that below.

The results below combine the in-memory database results with the on disk database results side by side. They are from a Nexus 4 on 20th Dec 2013, and we've put an "M" in front of the tests for the in-memory results.

M RAW - Avg: 4
RAW - Avg: 230

M ORMLite - Avg: 6
ORMLite - Avg: 233

M GreenDAO - Avg: 3
GreenDAO - Avg: 163

M RAW - Avg: 2925
RAW - Avg: 3281

M ORMLite - Avg: 6898
ORMLite - Avg: 7203

M GreenDAO - Avg: 1960
GreenDAO - Avg: 2470

M RAW - Avg: 803
RAW - Avg: 808

M ORMLite - Avg: 1656
ORMLite - Avg: 1729

M GreenDAO - Avg: 1183
GreenDAO - Avg: 1186

M RAW - Avg: 1
RAW - Avg: 1

M ORMLite - Avg: 2
ORMLite - Avg: 3

M GreenDAO - Avg: 1
GreenDAO - Avg: 1

M RAW - Avg: 8
RAW - Avg: 8

M ORMLite - Avg: 119
ORMLite - Avg: 156

M GreenDAO - Avg: 7
GreenDAO - Avg: 6

M RAW - Avg: 8
RAW - Avg: 515

M ORMLite - Avg: 10
ORMLite - Avg: 558

M GreenDAO - Avg: 8
GreenDAO - Avg: 369



After pressing "Run Benchmark" you can press "Show Results" to see the results:


Technical Reference

Customizing Benchmark Tests

Changing The GreenDao Tests

GreenDao requires a separate project to generate the source code for database entities and DAOs. The ORM-Benchmark-GreenDAO-Generator project is a Java application that you can run to regenerate the database definitions. You only need to do this if you want to change the GreenDao database model!