234 lines
6.6 KiB
Markdown
234 lines
6.6 KiB
Markdown
# 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.](/ZipponDB/build)
|
|
|
|
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
|
|
=====================================
|
|
```
|
|
|