Performance comparison of Delphi storage systems

Published on 30th June 2012.
Every application has to store data. We mostly store Integer, String and Boolean values. One of the apps that I am maintaining uses several storage systems in parallel, namely FreeBase 2.0, JvAppIniFileStorage and JvAppXMLFileStorage. To put future design decisions on solid ground, I measured how fast 5000 entries are deleted, recreated, flushed to disk and reloaded. Out of curiosity, the performance of JvAppDBStorage and JvAppRegistryStorage was also checked under the same conditions.

All of the components have almost identical APIs and can therefore be replaced by each other with only minimal code changes. The Jv* components are open-source (JEDI-VCL 3.10), whereas the FreeBase solution is proprietary (published by Rainer Reusch in the 'Toolbox' magazine) and saves in its own binary format.

Reading vs. writing

Usually, data is read more often than written. In this regard, all components perform well. If one considers deleting data crucial, the Registry is surprisingly slow (much slower than adding data).

Data loss

We know that our application sometimes looses FreeBase-stored data and there is a suspicious property 'OverwriteCrashed'. Still, it is not clear whether it's actually FreeBase loosing the data, because changes are kept in memory, so any crash could prevent flushing. More thourough tests are needed to address this aspect.