When one or more of the All filters is selected - only average normalized results are displayed. Please read Running and Results for more details.
Comparison of database storage efficiency - entity objects per MB (higher is better)
  | Derby embedded | H2 embedded | HSQLDB embedded | SQLite embedded | DB4O embedded | ObjectDB embedded | Derby server | H2 server | MySQL server | PostgreSQL server | ObjectDB server |
---|---|---|---|---|---|---|---|---|---|---|---|
DataNucleus | 3,131 | 2,040 | 3,125 | failed | |||||||
EclipseLink | 3,162 | 2,932 | 3,124 | 6,016 | |||||||
Hibernate | 2,963 | 2,040 | 3,124 | failed | |||||||
OpenJPA | 3,053 | 2,040 | 3,124 | ||||||||
ObjectDB | 5,479 |
Disk space efficiency chart - The Y-Axis represents normalized score in logarithmic scale - higher is better:
Disk space efficiency chart - The Y-Axis represents normalized score in linear scale - higher is better:
Best and Worst JPA/Database Performer in this comparison
The Most Efficient:
1. | EclipseLink with SQLite embedded | 100 |
2. | ObjectDB embedded | 91.1 |
3. | EclipseLink with Derby embedded | 52.6 |
4. | DataNucleus with Derby embedded | 52.0 |
5. | DataNucleus with HSQLDB embedded | 51.9 |
6. | EclipseLink with HSQLDB embedded | 51.9 |
7. | Hibernate with HSQLDB embedded | 51.9 |
8. | OpenJPA with HSQLDB embedded | 51.9 |
The Least Efficient:
9. | OpenJPA with Derby embedded | 50.7 |
10. | Hibernate with Derby embedded | 49.3 |
11. | EclipseLink with H2 embedded | 48.7 |
12. | DataNucleus with H2 embedded | 33.9 |
13. | Hibernate with H2 embedded | 33.9 |
14. | OpenJPA with H2 embedded | 33.9 |
15. | DataNucleus with DB4O embedded | 0.0000 |
16. | Hibernate with SQLite embedded | 0.0000 |
Problems (Exceptions) in these tests
- Hibernate with SQLite embedded
javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin failed: at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147) at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:63) at org.jpab.Test.persist(Test.java:210) at org.jpab.Test.persist(Test.java:200) at org.jpab.Runner$PersistAction.run0(Runner.java:538) at org.jpab.Runner$TestAction.run(Runner.java:517) at java.lang.Thread.run(Thread.java:662) Caused by: org.hibernate.TransactionException: JDBC begin failed: at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:92) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) ... 5 more Caused by: java.sql.SQLException: SQL logic error or missing database at org.sqlite.DB.throwex(DB.java:288) at org.sqlite.DB.exec(DB.java:68) at org.sqlite.Conn.setAutoCommit(Conn.java:159) at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:87) ... 7 more
- DataNucleus with DB4O embedded
com.db4o.ext.DatabaseClosedException at com.db4o.internal.ObjectContainerBase.checkClosed(ObjectContainerBase.java:310) at com.db4o.internal.ObjectContainerBase.checkTransaction(ObjectContainerBase.java:338) at com.db4o.internal.ObjectContainerBase.queryByExample(ObjectContainerBase.java:806) at com.db4o.internal.ExternalObjectContainer.queryByExample(ExternalObjectContainer.java:68) at org.datanucleus.store.db4o.valuegenerator.DB4OIncrementGenerator.reserveBlock(DB4OIncrementGenerator.java:142) at org.datanucleus.store.valuegenerator.AbstractGenerator.reserveBlock(AbstractGenerator.java:305) at org.datanucleus.store.db4o.valuegenerator.DB4OIncrementGenerator.obtainGenerationBlock(DB4OIncrementGenerator.java:97) at org.datanucleus.store.valuegenerator.AbstractGenerator.obtainGenerationBlock(AbstractGenerator.java:197) at org.datanucleus.store.valuegenerator.AbstractGenerator.next(AbstractGenerator.java:105) at org.datanucleus.store.AbstractStoreManager.getStrategyValueForGenerator(AbstractStoreManager.java:1650) at org.datanucleus.store.AbstractStoreManager.getStrategyValue(AbstractStoreManager.java:1550) at org.datanucleus.state.JDOStateManager.populateStrategyFields(JDOStateManager.java:693) at org.datanucleus.state.JDOStateManager.initialiseForPersistentNew(JDOStateManager.java:368) at org.datanucleus.state.ObjectProviderFactory.newForPersistentNew(ObjectProviderFactory.java:163) at org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.java:1797) at org.datanucleus.ObjectManagerImpl.persistObjectWork(ObjectManagerImpl.java:1647) at org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:1504) at org.datanucleus.api.jpa.JPAEntityManager.persist(JPAEntityManager.java:535) at org.jpab.Test.persist(Test.java:214) at org.jpab.Test.persist(Test.java:200) at org.jpab.Runner$PersistAction.run0(Runner.java:538) at org.jpab.Runner$TestAction.run(Runner.java:517) at java.lang.Thread.run(Thread.java:662)
The results above are in use in calculating the following average results
- All Tests - All Operations - All Batch Size Modes
- All Tests - All Operations - Few Entities (5/100)
- All Tests - Storage Efficiency - All Batch Size Modes
- All Tests - Storage Efficiency - Few Entities (5/100)
- Multithreading Test - All Operations - All Batch Size Modes
- Multithreading Test - All Operations - Few Entities (5/100)
- Multithreading Test - Storage Efficiency - All Batch Size Modes