Overall impression

We run two sets of tests:

  • "Regular" test, with an index only over the objects IDs;
  • "Unique field" test, with an index over object IDs and a "Name" UTF-8 property.

The performance scaling, when it comes to mORMot internal process (serialization, ORM, REST, in-memory tables) and SQLite3 engine, is linear.
Existing bottlenecks (like SQLite3 hard-drive on disk synchronization) persists, which does make sense.

Oracle performance is similar for individual requests, since the most process is spent in the remote access over a network; but array DML insertion is still very efficient, and CPU % use is very low.
TObjectList / TSQLRestServerStaticInMemoryExternal process speed is amazing - and the new CPU seems to like it!

ODBC process is still slower than direct access to Oracle client, and could be enhanced - especially by implementing array binding of parameters for BATCH process.
But no regression has been observed, just some small fixes discovered and committed.

Regular test

First of all, the "regular test", with UNIK conditional not defined.
It is similar to those previous tests.

Insertion speed

  SQLite3
(file full)
SQLite3
(file off)
SQLite3
(mem)
TObjectList
(static)
TObjectList
(virtual)
SQLite3
(ext file full)
SQLite3
(ext file off)
SQLite3
(ext mem)
Oracle ODBC Oracle Jet
Direct 119 994 91397 277454 290731 186 1038 81952 335 192 1635
Batch 167 915 112450 410643 421834 180 936 103382 51538 207 1796
Trans 75417 103248 107644 284592 290663 62188 93711 97540 514 267 2052
Batch Trans 105095 126138 132587 410576 416354 98900 110631 120505 54336 257 2177

Read speed

  SQLite3
(file full)
SQLite3
(file off)
SQLite3
(mem)
TObjectList
(static)
TObjectList
(virtual)
SQLite3
(ext file full)
SQLite3
(ext file off)
SQLite3
(ext mem)
Oracle ODBC Oracle Jet
By one 28084 27700 128614 289855 296278 136010 136870 138404 634 450 2580
All Virtual 440489 424448 429848 668091 309904 249650 256660 247328 56932 22850 141723
All Direct 439367 429774 413257 670960 655909 426912 431034 431518 90573 39885 196078

Test with unique field

Then, we defined UNIK conditional, to compare with this other benchmark result.

Insertion speed

  SQLite3
(file full)
SQLite3
(file off)
SQLite3
(mem)
TObjectList
(static)
TObjectList
(virtual)
SQLite3
(ext file full)
SQLite3
(ext file off)
SQLite3
(ext mem)
Oracle ODBC Oracle Jet
Direct 149 814 59591 247451 249103 144 808 56143 347 192 1580
Batch 155 751 67837 338730 354333 139 813 65983 31636 185 1606
Trans 50356 66472 70737 244558 251686 49933 63606 65547 493 255 2103
Batch Trans 68201 78473 81944 341950 349797 66490 72578 75804 14454 248 2131

Read speed

  SQLite3
(file full)
SQLite3
(file off)
SQLite3
(mem)
TObjectList
(static)
TObjectList
(virtual)
SQLite3
(ext file full)
SQLite3
(ext file off)
SQLite3
(ext mem)
Oracle ODBC Oracle Jet
By one 27998 28272 129038 285975 291205 136388 137805 138450 602 437 2495
By name 26019 25566 100597 176112 172401 84224 83633 83764 635 439 2402
All Virtual 434103 421834 436033 672314 306842 253459 253369 255193 56282 23459 138542
All Direct 436414 425025 434253 654278 658674 435085 431928 433914 77759 37993 194855

Feedback is welcome on our forum!