ObjectDatabase++ has been specially designed for the requirements of server databases and therefore takes the very unusual step to double writing all changes to the data files, this prevents the files from ever becoming invalid as all information required to reverse an edit is saved before any changes are actually made. ObjectDatabase++ does reduce the amount of disk writes by having all inter-process communication (IPC) between concurrently executing transactions through a shared memory file (<table name>.odm), this is required so no two transactions can allocate the same resource twice. This design requiring ObjectDatabase++ only to write through to the hard drive when committing a transaction, this tactic is still slower than the traditional design that only requires the log file to be flushed on each commit. However ObjectDatabase++ has multi-process ability, allowing servers to have many more concurrently executing transactions in order to create a faster database server in total.
When recovering from a traditional designed database, the files are recovered from that last backup point and the trace log file is re-executed. This is a process that can take minutes to complete and with multimedia databases, the log file can grow to gigabytes. It also requires all executing transaction to abort, allow the recovery, and then start again. ObjectDatabase++ does the extra processing required to allow executing transactions to continue unimpeded by another transaction that has unexpectedly terminated at any point in any subsystem, allowing instantaneous recovery of terminated transactions.


