Benchmark
Benchmark are set to evolve. I have currently multiple ideas to improve performance.
ZipponDB is fairly fast and can easely query millions of entities. Current limitation is around 5GB I would say, depending of CPU cores, usage and kind of data saved. After that query can start to become slow as optimizations are still missing.
Most of query's time is writing entities into a JSON format. Parsing the file itself take little time. For example in the benchmark report bellow, I parse 100 000 users in around 40ms if there is no entities to send and 130ms if all 100 000 entities are to send.
I choosed to release ZipponDB binary with the small release. Zig has a fast and safe release, but the fast release isn't that much faster in my case, if not at all. If you want you can build it with it.
Command
You can run zig build benchmark
, if you clone the repo to benchmark your machine.
More info on how to build from source.
Here an example on my machine with 16 core:
=====================================
Populating with 5000 users.
Populate duration: 0.035698 seconds
Database path: benchmarkDB
Total size: 0.36Mb
CPU core: 16
Max file size: 5.00Mb
LOG: 0.02Mb
BACKUP: 0.00Mb
DATA: 0.33Mb
Item: 0.00Mb | 19 entities | 1 files
User: 0.33Mb | 5000 entities | 1 files
Order: 0.00Mb | 0 entities | 1 files
Category: 0.00Mb | 4 entities | 1 files
--------------------------------------
Query: GRAB User {}
Time: 16.90 ± 25.22 ms | Min 8.25ms | Max 92.55ms
Query: GRAB User {name='asd'}
Time: 2.62 ± 0.10 ms | Min 2.52ms | Max 2.85ms
Query: GRAB User [1] {}
Time: 0.16 ± 0.01 ms | Min 0.15ms | Max 0.18ms
Query: GRAB User [name] {}
Time: 7.88 ± 11.69 ms | Min 3.91ms | Max 42.94ms
Query: GRAB User {name = 'Charlie'}
Time: 3.87 ± 0.16 ms | Min 3.70ms | Max 4.17ms
Query: GRAB Category {}
Time: 0.20 ± 0.07 ms | Min 0.17ms | Max 0.41ms
Query: GRAB Item {}
Time: 0.21 ± 0.02 ms | Min 0.19ms | Max 0.25ms
Query: GRAB Order {}
Time: 0.14 ± 0.01 ms | Min 0.13ms | Max 0.18ms
Query: GRAB Order [from, items, quantity, at] {}
Time: 4.18 ± 12.01 ms | Min 0.15ms | Max 40.21ms
Query: DELETE User {}
Time: 0.64 ± 1.13 ms | Min 0.23ms | Max 4.04ms
Read: 1907698 Entity/second *Include small condition
Write: 350200 Entity/second
=====================================
Populating with 100000 users.
Populate duration: 0.707605 seconds
Database path: benchmarkDB
Total size: 6.62Mb
CPU core: 16
Max file size: 5.00Mb
LOG: 0.02Mb
BACKUP: 0.00Mb
DATA: 6.59Mb
Item: 0.00Mb | 19 entities | 1 files
User: 6.59Mb | 100000 entities | 2 files
Order: 0.00Mb | 0 entities | 1 files
Category: 0.00Mb | 4 entities | 1 files
--------------------------------------
Query: GRAB User {}
Time: 126.99 ± 3.05 ms | Min 123.37ms | Max 133.56ms
Query: GRAB User {name='asd'}
Time: 38.12 ± 1.60 ms | Min 36.48ms | Max 41.88ms
Query: GRAB User [1] {}
Time: 0.19 ± 0.02 ms | Min 0.16ms | Max 0.22ms
Query: GRAB User [name] {}
Time: 59.33 ± 1.29 ms | Min 58.02ms | Max 61.47ms
Query: GRAB User {name = 'Charlie'}
Time: 53.29 ± 1.00 ms | Min 51.50ms | Max 54.78ms
Query: GRAB Category {}
Time: 0.19 ± 0.01 ms | Min 0.18ms | Max 0.22ms
Query: GRAB Item {}
Time: 5.51 ± 13.43 ms | Min 0.22ms | Max 45.22ms
Query: GRAB Order {}
Time: 0.16 ± 0.01 ms | Min 0.15ms | Max 0.18ms
Query: GRAB Order [from, items, quantity, at] {}
Time: 0.17 ± 0.02 ms | Min 0.15ms | Max 0.21ms
Query: DELETE User {}
Time: 5.96 ± 17.04 ms | Min 0.26ms | Max 57.07ms
Read: 2623338 Entity/second *Include small condition
Write: 1125278 Entity/second
=====================================
Populating with 1000000 users.
Populate duration: 7.029142 seconds
Database path: benchmarkDB
Total size: 65.96Mb
CPU core: 16
Max file size: 5.00Mb
LOG: 0.02Mb
BACKUP: 0.00Mb
DATA: 65.93Mb
Item: 0.00Mb | 19 entities | 1 files
User: 65.93Mb | 1000000 entities | 14 files
Order: 0.00Mb | 0 entities | 1 files
Category: 0.00Mb | 4 entities | 1 files
--------------------------------------
Query: GRAB User {}
Time: 250.77 ± 6.74 ms | Min 247.08ms | Max 270.61ms
Query: GRAB User {name='asd'}
Time: 67.90 ± 0.42 ms | Min 67.31ms | Max 68.78ms
Query: GRAB User [1] {}
Time: 8.92 ± 24.86 ms | Min 0.55ms | Max 83.51ms
Query: GRAB User [name] {}
Time: 110.08 ± 5.27 ms | Min 106.86ms | Max 125.21ms
Query: GRAB User {name = 'Charlie'}
Time: 73.65 ± 2.79 ms | Min 69.24ms | Max 79.22ms
Query: GRAB Category {}
Time: 0.19 ± 0.04 ms | Min 0.16ms | Max 0.33ms
Query: GRAB Item {}
Time: 0.21 ± 0.02 ms | Min 0.19ms | Max 0.26ms
Query: GRAB Order {}
Time: 0.15 ± 0.01 ms | Min 0.14ms | Max 0.17ms
Query: GRAB Order [from, items, quantity, at] {}
Time: 0.17 ± 0.01 ms | Min 0.16ms | Max 0.18ms
Query: DELETE User {}
Time: 11.74 ± 34.19 ms | Min 0.29ms | Max 114.30ms
Read: 14727354 Entity/second *Include small condition
Write: 5468517 Entity/second
=====================================
Populating with 10000000 users.
Populate duration: 72.675680 seconds
Database path: benchmarkDB
Total size: 659.33Mb
CPU core: 16
Max file size: 5.00Mb
LOG: 0.02Mb
BACKUP: 0.00Mb
DATA: 659.30Mb
Item: 0.00Mb | 19 entities | 1 files
User: 659.30Mb | 10000000 entities | 132 files
Order: 0.00Mb | 0 entities | 1 files
Category: 0.00Mb | 4 entities | 1 files
--------------------------------------
Query: GRAB User {}
Time: 2535.29 ± 86.92 ms | Min 2448.39ms | Max 2712.78ms
Query: GRAB User {name='asd'}
Time: 684.75 ± 39.96 ms | Min 649.09ms | Max 797.13ms
Query: GRAB User [1] {}
Time: 6.65 ± 1.00 ms | Min 5.36ms | Max 8.75ms
Query: GRAB User [name] {}
Time: 1106.21 ± 33.57 ms | Min 1056.57ms | Max 1172.61ms
Query: GRAB User {name = 'Charlie'}
Time: 690.56 ± 20.41 ms | Min 661.51ms | Max 718.07ms
Query: GRAB Category {}
Time: 0.21 ± 0.03 ms | Min 0.18ms | Max 0.31ms
Query: GRAB Item {}
Time: 0.23 ± 0.04 ms | Min 0.19ms | Max 0.32ms
Query: GRAB Order {}
Time: 0.15 ± 0.01 ms | Min 0.13ms | Max 0.17ms
Query: GRAB Order [from, items, quantity, at] {}
Time: 0.17 ± 0.02 ms | Min 0.15ms | Max 0.21ms
Query: DELETE User {}
Time: 109.55 ± 326.64ms | Min 0.47ms | Max 1089.46ms
Read: 14603810 Entity/second *Include small condition
Write: 5403847 Entity/second
=====================================