Some major speed improvements have been made to our SynDB*
units, and how they are used within the mORMot persistence
layer.
It results in an amazing speed increase, in some cases.
Here are some of the optimizations how took place in the source code trunk:
- SQL statement client-side cache in ODBC and OleDB;
- SQL statement server-side cache for Oracle;
- When inserting individual data rows in an external table, the last inserted
IDs are maintained in memory instead of executing "select max(id)" -
we added a new property
EngineAddUseSelectMaxID
to unset this optimization - we noted that this modification circumvented a known limitation of Firebird very efficiently.
Overall, I observed from x2 to x10 performance boost with simple
Add()
operations, using ODBC, OleDB and direct Oracle access, when
compare to previous
benchmarks (which were already impressive).
BATCH
mode performance is less impacted, since it by-passed some of those
limitations, but even in this operation mode, there is some benefits
(especially with ODBC and OleDB).
Here are some results, directly generated by the supplied "15 - External DB performance" sample.