Hi,
I compared JDBC and OpenJPA speed of fetching simple entities (consisting only 
of a single ID attribute). The speed difference seems quite severe.

With JDBC, I can read 2 million entities in about 3 seconds when OS/DB caches 
are warm.
With OpenJPA using slice (a single slice), it takes a bit above 30 seconds, so 
about ten times as long, more than I would expect.
Using a direct connection without slice reduces this time to about 24 seconds, 
~8 times as much as the JDBC version.

In the JDBC test I also create objects from the rows, so both tests include 
object creation overhead of the entities (plus a sum calculation of the IDs).

I'm doing this test using PostgreSQL and an up to date OpenJPA 2.2 snapshot.
Entities are enhanced using javaagent enhancement.

I tried optimizing OpenJPA performance with:
      <property name="openjpa.ConnectionRetainMode" value="always"></property>
      <property name="openjpa.ProxyManager" value="TrackChanges=false"/>
      <property name="openjpa.IgnoreChanges" value="true"/>
      <property name="openjpa.LockManager" value="none"/>
      <property name="openjpa.DetachState" 
value="fetch-groups(DetachedStateField=false)"/>

But those didn't seem to affect performance in any significant way.

Now, is such a large performance hit expected, and what would be the reason?
It would be nice if some performance numbers like these would be in the 
documentation, by the way, to be better able to judge for what applications 
OpenJPA can be used/what performance penalties one has to expect, depending on 
the situation.

Regards,
Michael
___________________________________________________

SMA Solar Technology AG
Aufsichtsrat: Guenther Cramer (Vorsitzender)
Vorstand: Juergen Dolle, Roland Grebe, Uwe Hertel, Pierre-Pascal Urbon, Marko 
Werner
Handelsregister: Amtsgericht Kassel HRB 3972
Sitz der Gesellschaft: 34266 Niestetal
USt-ID-Nr. DE 113 08 59 54
WEEE-Reg.-Nr. DE 95881150
___________________________________________________

Reply via email to