It is the JPOX projects' committed aim to provide the best performance possible, and to publish benchmarks
so that users can judge for themselves the performance of the persistence solution. If anybody has a publically
available benchmark of Java object persistence that they want to compare JPOX on, we would be interested
in contributing to the exercise so we can see how JPOX performs.
Our attitude is that :-
- Public benchmarks are there for a reason and provide valuable information for our users.
- We will publish valid public benchmarks no matter if they show JPOX is deficient in some area.
Published benchmarks will show, wherever possible, all competing products so that you, the user, can see how
JPOX compares. Benchmarks are comparative so you have to have other products to compare against.
This is in stark contrast to competing persistence technologies which do not publish benchmarks
maybe in the fear that it may make them look bad.
- If JPOX is found lacking in performance in a particular area, we will strive to remedy the problem so
that you always have a competitive product.
- If any group wishes to make a comparison of JPOX with other persistence solutions we are willing
to aid them in finding an optimum JPOX configuration.
See also :-
The following comparisons are currently available
JPOX has been run on the publically available object persistence performance benchmark
PolePosition, comparing against JDBC, and Hibernate.
PolePosition was originally written by the authors of db4o, an object database project, but exists
in its own right as a separate project. It is open source and by being so is considered "independent"
since its tests can be challenged for validity, and can be run by anybody with the urge to do so.
Application architects should review the benchmark themselves when judging the relevance of
any of the tests to their target application. The benchmark provides a large number of very common
situations.
PolePosition comes provided with JDBC and Hibernate configurations already set. The Hibernate team
were invited to provide a custom configuration for use of their software but generously declined.
The JPOX configuration was provided by ourselves. This is available from us upon request.
The results show :-
- JDBC can be the best choice for some projects when only very simple data models are required
to be persisted. When object relationships are required, or where complex inheritance hierarchies
are present, the amount of code necessary would preclude JDBC and so an O/R persistence solution
would be required.
- Consistent significant performance benefit for using JPOX rather than Hibernate. This was
with the default Hibernate configuration provided with PolePosition. We aren't experts on
Hibernate so don't claim to have any optimised Hibernate configuration (please refer to the
PolePosition documentation for the configuration used).
This benchmark provides its results in detailed HTML
or in
.
The results are summarised below.
| PolePosition Circuit | JPOX (1.1.0-beta-6) time (ms) | Hibernate (2.1) time (ms) |
|---|
| Melbourne | 2826 | 5581 |
| Sepang | 4682 | 22140 |
| Bahrain | 28085 | 81610 |
| Imola | 325 | 3653 |
| Barcelona | 4613 | 127329 |
| Grand Total | 40531 | 240313 |
There was a report by "Piotr Ziemniak, Bartosz Sakowicz, Andrzej Napieralski" published at
CADSM?2007, February 20-24, 2007, Polyana, UKRAINE. This group made no contact with JPOX
to aid in their report and so we were left to find out about it second hand. They made a
conclusion that JPOX had worse performance than Hibernate and TopLink on their unpublished
tests. Analysis of their report demonstrates the following
- They had schema generation turned on at runtime. This is against JPOX best practice
- They have no datastore connection pooling enabled for JPOX. Out of the box
JPOX will not enable this, whereas Hibernate and TopLink will. This is a glaring
omission when you are allegedly comparing performance. In our tests database connection
pooling can change performance by 60% or so.
- They also claimed that JPOX configuration was "hardest" yet provided no details
whatsoever to back this up.
If any of that group read this and have extra information we'd be delighted to add it
here. Moreover, we'd be willing to provide them with updates to their JPOX configuration
so that they could re-run their tests. Perhaps if they also actually publish the benchmark
then people would have grounds to comment.
There was an article in DevX
comparing JPOX with Hibernate et al. JPOX were not asked on how to provide an optimised
configuration for this study and so only read about it second hand. After analysis of the report
we have the following observations :-
- The report states "JPOX JDO 1.2" ? JPOX implements JDO1/JDO2 yes, but it also implements
JPA1 ... and we have never used the name "JPOX JDO" in the last year. Version 1.2 is not
out yet. He presumably means 1.1.6 but this doesnt bode well for the rest of the study if
doesnt know the version number of what he is testing.
- JPOX has "log4j" as a dependency. This is optional only.
- The report has "c3p0" for Hibernate (and so are using connection pooling for that) yet
it doesn't for JPOX (and so JPOX is being run without any connection pooling).
This will significantly impact any performance!
- The report states JDO takes a different approach. It allows lazy loading, but does not
load anything into the lazily loaded field like addresses. In fact, if you access the
property directly, you will see that the lazy loaded field would contain null. This can
cause some issues if you don?t properly access the data with getters and setters:
It is obvious from this that the author hasn't read as far as PersistenceAware
Overall the performance shows that JPOX is on a par with Hibernate ... yet it has no
database connection pooling enabled and so with this turned on would have been far superior.
Writing a performance comparison and making such an omission is unprofessional and demonstrates
that the author took little time to understand the technology.