DataNucleus

DataNucleus Performance Summary

The following charts show the performance of DataNucleus (in green) relatively to other JPA/DBMS combinations (in gray).

Position #1 on the X-Axis (the fastest) is about 100 times faster than position #32 (the slowest).
In the chart below the Y-Axis represents result score (maximum 100) in logarithmic scale - higher is better:
JPA performance benchmark comparision Hibernate, EclipseLink, OpenJPA, DataNucleus, ObjectDB
In the chart below the Y-Axis represents result score (maximum 100) in linear scale - higher is better:
JPA performance benchmark comparision Hibernate, EclipseLink, OpenJPA, DataNucleus, ObjectDB


The configurations in which DataNucleus has been tested are listed in the following table:

 Database + JPA ProviderNormalized Score
100 - Best,  0 - Worst
Final Position
1 - Best,  32 - Worst
Failed Tests
1DataNucleus with Derby embedded7.415  (out of 32)14
2DataNucleus with PostgreSQL server5.619  (out of 32)6
3DataNucleus with H2 embedded5.122  (out of 32)5
4DataNucleus with HSQLDB embedded4.324  (out of 32)13
5DataNucleus with Derby server2.729  (out of 32)15
6DataNucleus with MySQL server2.630  (out of 32)5
7DataNucleus with H2 server1.332  (out of 32)7

About DataNucleus

DataNucleus Access Platform (formerly JPOX) is a data management framework that implements the JPA and JDO specifications. It is more than just an object-relational mapping (ORM) because it can also map and manage data from sources other than relational databases (e.g. DB4O). DataNucleus also serves as the Java persistence layer in Google App Engine.

DataNucleus is available under the Apache open source license.

In this benchmark DataNucleus 2.1.1 (which was released in 2010) has been tested.

DataNucleus Performance Tuning

The DataNucleus default configuration is far from being optimized. For example, unlike other JPA implementations, in DataNucleus connection pooling is disabled by default.

To get the best possible performance out of DataNucleus we followed the DataNucleus Performance Tuning instructions and applied the following optimizations:

  • A connection pool (DBCP) was enabled.
  • EntityManagerFactory was created only once per test.
  • Every thread had its own private EntityManager.
  • Database schema generation was completed before time measurement started.
  • Database schema validation was disabled.
  • A discriminator was defined in the base class of a class hierarchy.
  • The datanucleus.autoStartMechanism property was set to None.
  • The datanucleus.rdbms.initializeColumnInfo property was set to None.
  • The datanucleus.persistenceByReachabilityAtCommit property was set to false.
  • The datanucleus.manageRelationships property was set to false.
  • Logging was disabled.

All the entity classes have been enhanced by DataNucleus, by running the tests with a Java Agent
(javaagent:datanucleus-enhancer-2.1.0-release.jar).

Class enhancement time was completely excluded from the test time measurement.