The Poleposition benchmarking framework has helped us a lot to make performance runs visible and to find out where we are good and where we have to improve. We even used it internally with specialized circuits to track performance progress when we worked on the new IdSystem for db4o 8.0.
Now we have used Poleposition again to see how db4o 8.0 compares to previous versions. We have written a very basic 'circuit' to simulate the effect of fragmentation. All that it does is repeatedly store a large number of objects and then delete them all again, one by one. The code for this simple benchmark looks like this:
for (int i = 0; i < updateCount; i++) {
db.deleteAll(SilverstoneItem.class); // will be available in 8.0
db.commit();
for (int j = 1; j <= objectCount; j++ ){
db.store(new SilverstoneItem(j));
}
db.commit();
}
Here are the results from running this benchmark with our three releases
7.4 (stable), 7.12 (production), 8.0 (development):
PolePositionSilverstoneVersions.pdf
With an increasing number of objects and an increasing number of repetitive deletes and updates, db4o 8.0 performs a lot better than previous versions. In this synthetic benchmark we see an improvement of 2x when 300,000 objects are stored and deleted 10 times.
With databases that are continously used, you can expect a much greater improvement, especially because we have drastically reduced the load on the FreespaceManager.
It looks like the work on the new BTreeIdSystem has really paid off for performance.
Enjoy!