Skip to content

Commit b88a0ae

Browse files
chore: update benchmark results [skip ci]
1 parent eef348f commit b88a0ae

File tree

2 files changed

+222
-57
lines changed

2 files changed

+222
-57
lines changed

README.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,150 @@ While encryption adds overhead, it provides quantum-resistant security for sensi
112112

113113
<!-- BENCHMARK_RESULTS_START -->
114114

115+
### Latest Automated Benchmark Results
116+
117+
**Last Updated:** 2025-11-15
118+
119+
#### Forward Email Production
120+
121+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
122+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
123+
| v18.20.4 | better-sqlite3-multiple-ciphers | 238.6 | 11,778 | 26,632 | 21,163 | 124,347 | 3.98 |
124+
| v18.20.8 | better-sqlite3-multiple-ciphers | 112.0 | 10,658 | 14,466 | 18,641 | 75,614 | 3.98 |
125+
| v20.19.5 | better-sqlite3-multiple-ciphers | 124.2 | 9,715 | 14,018 | 18,485 | 55,885 | 3.98 |
126+
| v22.13.0 | better-sqlite3-multiple-ciphers | 108.4 | 12,022 | 19,187 | 22,204 | 87,466 | 3.98 |
127+
| v22.21.1 | better-sqlite3-multiple-ciphers | 125.8 | 9,829 | 15,833 | 18,416 | 8,120 | 3.98 |
128+
| v24.11.1 | better-sqlite3-multiple-ciphers | 123.6 | 9,938 | 7,497 | 10,446 | 66,203 | 3.98 |
129+
| v25.2.0 | better-sqlite3-multiple-ciphers | 113.1 | 9,032 | 15,189 | 17,763 | 53,723 | 3.98 |
130+
131+
#### Memory Temp Storage
132+
133+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
134+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
135+
| v18.20.4 | better-sqlite3-multiple-ciphers | 77.2 | 12,150 | 27,429 | 21,113 | 110,096 | 3.98 |
136+
| v18.20.8 | better-sqlite3-multiple-ciphers | 96.4 | 10,854 | 14,868 | 19,547 | 111,882 | 3.98 |
137+
| v20.19.5 | better-sqlite3-multiple-ciphers | 100.2 | 10,080 | 14,140 | 18,386 | 81,274 | 3.98 |
138+
| v22.13.0 | better-sqlite3-multiple-ciphers | 97.1 | 10,971 | 19,857 | 22,588 | 121,581 | 3.98 |
139+
| v22.21.1 | better-sqlite3-multiple-ciphers | 102.8 | 10,447 | 15,044 | 20,192 | 79,834 | 3.98 |
140+
| v24.11.1 | better-sqlite3-multiple-ciphers | 118.3 | 8,792 | 12,608 | 16,794 | 81,281 | 3.98 |
141+
| v25.2.0 | better-sqlite3-multiple-ciphers | 99.7 | 8,322 | 15,507 | 18,095 | 81,880 | 3.98 |
142+
143+
#### Synchronous OFF (Unsafe)
144+
145+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
146+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
147+
| v18.20.4 | better-sqlite3-multiple-ciphers | 101.0 | 13,275 | 27,223 | 23,768 | 151,906 | 3.98 |
148+
| v18.20.8 | better-sqlite3-multiple-ciphers | 87.5 | 11,663 | 14,835 | 19,697 | 103,950 | 3.98 |
149+
| v20.19.5 | better-sqlite3-multiple-ciphers | 90.4 | 10,487 | 14,160 | 18,817 | 83,105 | 3.98 |
150+
| v22.13.0 | better-sqlite3-multiple-ciphers | 82.1 | 10,093 | 19,517 | 23,070 | 130,839 | 3.98 |
151+
| v22.21.1 | better-sqlite3-multiple-ciphers | 87.5 | 11,260 | 17,239 | 20,120 | 105,966 | 3.98 |
152+
| v24.11.1 | better-sqlite3-multiple-ciphers | 126.4 | 8,617 | 9,316 | 15,436 | 78,382 | 3.98 |
153+
| v25.2.0 | better-sqlite3-multiple-ciphers | 98.3 | 10,441 | 15,529 | 18,209 | 42,366 | 3.98 |
154+
155+
#### Synchronous EXTRA (Safe)
156+
157+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
158+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
159+
| v18.20.4 | better-sqlite3-multiple-ciphers | 77.5 | 8,884 | 26,936 | 12,477 | 162,153 | 3.98 |
160+
| v18.20.8 | better-sqlite3-multiple-ciphers | 100.0 | 3,810 | 14,348 | 4,781 | 100,281 | 3.98 |
161+
| v20.19.5 | better-sqlite3-multiple-ciphers | 105.5 | 2,760 | 13,780 | 3,152 | 66,273 | 3.98 |
162+
| v22.13.0 | better-sqlite3-multiple-ciphers | 92.7 | 4,275 | 18,716 | 5,659 | 100,513 | 3.98 |
163+
| v22.21.1 | better-sqlite3-multiple-ciphers | 96.7 | 4,638 | 17,081 | 5,734 | 101,523 | 3.98 |
164+
| v24.11.1 | better-sqlite3-multiple-ciphers | 144.2 | 2,973 | 9,294 | 4,405 | 96,852 | 3.98 |
165+
| v25.2.0 | better-sqlite3-multiple-ciphers | 101.7 | 2,725 | 15,114 | 3,346 | 74,766 | 3.98 |
166+
167+
#### No Auto Vacuum
168+
169+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
170+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
171+
| v18.20.4 | better-sqlite3-multiple-ciphers | 76.8 | 12,077 | 27,109 | 20,485 | 137,931 | 4.12 |
172+
| v18.20.8 | better-sqlite3-multiple-ciphers | 97.3 | 11,197 | 14,635 | 19,182 | 116,768 | 4.12 |
173+
| v20.19.5 | better-sqlite3-multiple-ciphers | 101.3 | 10,065 | 14,092 | 18,570 | 80,295 | 4.12 |
174+
| v22.13.0 | better-sqlite3-multiple-ciphers | 95.3 | 11,169 | 18,908 | 22,200 | 118,078 | 4.12 |
175+
| v22.21.1 | better-sqlite3-multiple-ciphers | 94.7 | 11,001 | 17,000 | 19,486 | 112,613 | 4.12 |
176+
| v24.11.1 | better-sqlite3-multiple-ciphers | 100.2 | 9,981 | 16,660 | 19,736 | 113,340 | 4.12 |
177+
| v25.2.0 | better-sqlite3-multiple-ciphers | 99.3 | 9,757 | 14,620 | 17,738 | 78,162 | 4.12 |
178+
179+
#### Incremental Vacuum
180+
181+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
182+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
183+
| v18.20.4 | better-sqlite3-multiple-ciphers | 78.2 | 12,034 | 27,226 | 21,070 | 108,601 | 4.13 |
184+
| v18.20.8 | better-sqlite3-multiple-ciphers | 98.0 | 10,516 | 11,737 | 19,863 | 115,660 | 4.13 |
185+
| v20.19.5 | better-sqlite3-multiple-ciphers | 97.4 | 10,159 | 13,512 | 18,436 | 81,613 | 4.13 |
186+
| v22.13.0 | better-sqlite3-multiple-ciphers | 91.1 | 12,533 | 19,258 | 22,819 | 136,724 | 4.13 |
187+
| v22.21.1 | better-sqlite3-multiple-ciphers | 97.5 | 10,690 | 13,274 | 19,033 | 91,988 | 4.13 |
188+
| v24.11.1 | better-sqlite3-multiple-ciphers | 96.9 | 10,628 | 16,821 | 19,934 | 117,509 | 4.13 |
189+
| v25.2.0 | better-sqlite3-multiple-ciphers | 100.6 | 9,695 | 13,826 | 17,858 | 86,573 | 4.13 |
190+
191+
#### WAL Autocheckpoint 1000
192+
193+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
194+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
195+
| v18.20.4 | better-sqlite3-multiple-ciphers | 77.0 | 12,166 | 27,033 | 21,289 | 137,155 | 3.98 |
196+
| v18.20.8 | better-sqlite3-multiple-ciphers | 97.9 | 10,878 | 14,753 | 19,721 | 102,375 | 3.98 |
197+
| v20.19.5 | better-sqlite3-multiple-ciphers | 96.5 | 10,337 | 14,063 | 18,638 | 88,098 | 3.98 |
198+
| v22.13.0 | better-sqlite3-multiple-ciphers | 88.4 | 11,981 | 19,530 | 23,199 | 124,270 | 3.98 |
199+
| v22.21.1 | better-sqlite3-multiple-ciphers | 96.6 | 11,008 | 15,630 | 19,202 | 99,039 | 3.98 |
200+
| v24.11.1 | better-sqlite3-multiple-ciphers | 118.2 | 10,511 | 14,410 | 19,432 | 107,550 | 3.98 |
201+
| v25.2.0 | better-sqlite3-multiple-ciphers | 99.7 | 9,608 | 14,918 | 18,115 | 83,598 | 3.98 |
202+
203+
#### Cache Size 64MB
204+
205+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
206+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
207+
| v18.20.4 | better-sqlite3-multiple-ciphers | 76.1 | 12,330 | 26,946 | 21,278 | 155,836 | 3.98 |
208+
| v18.20.8 | better-sqlite3-multiple-ciphers | 95.4 | 10,887 | 14,862 | 19,226 | 102,575 | 3.98 |
209+
| v20.19.5 | better-sqlite3-multiple-ciphers | 94.2 | 10,262 | 14,179 | 18,360 | 86,423 | 3.98 |
210+
| v22.13.0 | better-sqlite3-multiple-ciphers | 86.7 | 12,778 | 19,765 | 23,104 | 134,608 | 3.98 |
211+
| v22.21.1 | better-sqlite3-multiple-ciphers | 103.1 | 10,389 | 16,285 | 20,021 | 100,644 | 3.98 |
212+
| v24.11.1 | better-sqlite3-multiple-ciphers | 106.8 | 9,385 | 10,502 | 15,585 | 79,170 | 3.98 |
213+
| v25.2.0 | better-sqlite3-multiple-ciphers | 97.8 | 9,848 | 15,344 | 18,032 | 87,176 | 3.98 |
214+
215+
#### MMAP 256MB
216+
217+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
218+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
219+
| v18.20.4 | better-sqlite3-multiple-ciphers | 74.5 | 12,234 | 27,098 | 21,195 | 165,508 | 3.98 |
220+
| v18.20.8 | better-sqlite3-multiple-ciphers | 95.0 | 11,214 | 13,718 | 20,095 | 116,144 | 3.98 |
221+
| v20.19.5 | better-sqlite3-multiple-ciphers | 93.7 | 10,315 | 14,308 | 18,024 | 81,813 | 3.98 |
222+
| v22.13.0 | better-sqlite3-multiple-ciphers | 85.6 | 12,666 | 20,391 | 23,226 | 123,609 | 3.98 |
223+
| v22.21.1 | better-sqlite3-multiple-ciphers | 95.9 | 10,920 | 17,413 | 20,731 | 119,531 | 3.98 |
224+
| v24.11.1 | better-sqlite3-multiple-ciphers | 107.2 | 9,419 | 13,363 | 19,434 | 94,153 | 3.98 |
225+
| v25.2.0 | better-sqlite3-multiple-ciphers | 98.6 | 9,620 | 15,633 | 18,122 | 82,420 | 3.98 |
226+
227+
#### better-sqlite3 (no encryption)
228+
229+
| Node Version | Library | Setup (ms) | Insert/sec | Select/sec | Update/sec | Delete/sec | DB Size (MB) |
230+
|--------------|---------|------------|------------|------------|------------|------------|--------------|
231+
| v18.20.4 | better-sqlite3 | 227.7 | 25,149 | 23,360 | 60,954 | 157,903 | 3.98 |
232+
| v20.19.5 | better-sqlite3 | 26.0 | 29,558 | 14,647 | 50,587 | 91,491 | 3.98 |
233+
| v22.13.0 | better-sqlite3 | 27.0 | 44,889 | 36,970 | 87,725 | 134,735 | 3.98 |
234+
235+
### Performance Comparison Summary
236+
237+
| Node Version | Platform | Arch | Timestamp |
238+
|--------------|----------|------|----------|
239+
| v18.20.4 | darwin | arm64 | 11/15/2025, 3:17:47 AM |
240+
| v18.20.8 | linux | x64 | 11/14/2025, 1:45:57 PM |
241+
| v20.19.5 | linux | x64 | 11/15/2025, 3:21:04 AM |
242+
| v22.13.0 | linux | x64 | 11/15/2025, 3:02:58 AM |
243+
| v22.21.1 | linux | x64 | 11/14/2025, 1:32:10 PM |
244+
| v24.11.1 | linux | x64 | 11/14/2025, 1:33:38 PM |
245+
| v25.2.0 | linux | x64 | 11/14/2025, 5:56:49 PM |
246+
247+
### Best Performers by Operation Type
248+
249+
**Insert Operations:** better-sqlite3 (no encryption) on Node.js v22.13.0 (44,889 ops/sec)
250+
251+
**Select Operations:** better-sqlite3 (no encryption) on Node.js v22.13.0 (36,970 ops/sec)
252+
253+
**Update Operations:** better-sqlite3 (no encryption) on Node.js v22.13.0 (87,725 ops/sec)
254+
255+
**Delete Operations:** MMAP 256MB on Node.js v18.20.4 (165,508 ops/sec)
256+
257+
258+
115259
<!-- BENCHMARK_RESULTS_END -->
116260

117261
## Forward Email's Production Configuration
Lines changed: 78 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,128 @@
11
{
2-
"timestamp": "2025-11-15T02:37:32.630Z",
2+
"timestamp": "2025-11-15T03:21:04.444Z",
33
"node_version": "v20.19.5",
44
"platform": "linux",
55
"arch": "x64",
66
"results": {
77
"Forward Email Production": {
88
"configName": "Forward Email Production",
9-
"setup_time": 128.161704,
10-
"insert_ops_per_sec": 9588,
11-
"select_ops_per_sec": 11908,
12-
"update_ops_per_sec": 16123,
13-
"delete_ops_per_sec": 37552,
9+
"setup_time": 124.205829,
10+
"insert_ops_per_sec": 9715,
11+
"select_ops_per_sec": 14018,
12+
"update_ops_per_sec": 18485,
13+
"delete_ops_per_sec": 55885,
1414
"vacuum_time": 0,
1515
"db_size_mb": "3.98",
16-
"wal_size_mb": "4.04"
16+
"wal_size_mb": "4.04",
17+
"library": "better-sqlite3-multiple-ciphers"
1718
},
1819
"Memory Temp Storage": {
1920
"configName": "Memory Temp Storage",
20-
"setup_time": 98.043266,
21-
"insert_ops_per_sec": 9987,
22-
"select_ops_per_sec": 14293,
23-
"update_ops_per_sec": 18459,
24-
"delete_ops_per_sec": 91075,
21+
"setup_time": 100.183868,
22+
"insert_ops_per_sec": 10080,
23+
"select_ops_per_sec": 14140,
24+
"update_ops_per_sec": 18386,
25+
"delete_ops_per_sec": 81274,
2526
"vacuum_time": 0,
2627
"db_size_mb": "3.98",
27-
"wal_size_mb": "4.04"
28+
"wal_size_mb": "4.04",
29+
"library": "better-sqlite3-multiple-ciphers"
2830
},
2931
"Synchronous OFF (Unsafe)": {
3032
"configName": "Synchronous OFF (Unsafe)",
31-
"setup_time": 95.336578,
32-
"insert_ops_per_sec": 10379,
33-
"select_ops_per_sec": 14399,
34-
"update_ops_per_sec": 19055,
35-
"delete_ops_per_sec": 87858,
33+
"setup_time": 90.37754,
34+
"insert_ops_per_sec": 10487,
35+
"select_ops_per_sec": 14160,
36+
"update_ops_per_sec": 18817,
37+
"delete_ops_per_sec": 83105,
3638
"vacuum_time": 0,
3739
"db_size_mb": "3.98",
38-
"wal_size_mb": "4.04"
40+
"wal_size_mb": "4.04",
41+
"library": "better-sqlite3-multiple-ciphers"
3942
},
4043
"Synchronous EXTRA (Safe)": {
4144
"configName": "Synchronous EXTRA (Safe)",
42-
"setup_time": 102.395315,
43-
"insert_ops_per_sec": 1659,
44-
"select_ops_per_sec": 13736,
45-
"update_ops_per_sec": 1803,
46-
"delete_ops_per_sec": 73335,
45+
"setup_time": 105.482829,
46+
"insert_ops_per_sec": 2760,
47+
"select_ops_per_sec": 13780,
48+
"update_ops_per_sec": 3152,
49+
"delete_ops_per_sec": 66273,
4750
"vacuum_time": 0,
4851
"db_size_mb": "3.98",
49-
"wal_size_mb": "4.04"
52+
"wal_size_mb": "4.04",
53+
"library": "better-sqlite3-multiple-ciphers"
5054
},
5155
"No Auto Vacuum": {
5256
"configName": "No Auto Vacuum",
53-
"setup_time": 109.561138,
54-
"insert_ops_per_sec": 10296,
55-
"select_ops_per_sec": 14288,
56-
"update_ops_per_sec": 18437,
57-
"delete_ops_per_sec": 89366,
58-
"vacuum_time": 54.604974,
57+
"setup_time": 101.335833,
58+
"insert_ops_per_sec": 10065,
59+
"select_ops_per_sec": 14092,
60+
"update_ops_per_sec": 18570,
61+
"delete_ops_per_sec": 80295,
62+
"vacuum_time": 54.86193,
5963
"db_size_mb": "4.12",
60-
"wal_size_mb": "7.41"
64+
"wal_size_mb": "7.41",
65+
"library": "better-sqlite3-multiple-ciphers"
6166
},
6267
"Incremental Vacuum": {
6368
"configName": "Incremental Vacuum",
64-
"setup_time": 97.319803,
65-
"insert_ops_per_sec": 9692,
66-
"select_ops_per_sec": 13681,
67-
"update_ops_per_sec": 18502,
68-
"delete_ops_per_sec": 89358,
69-
"vacuum_time": 52.212273,
69+
"setup_time": 97.358184,
70+
"insert_ops_per_sec": 10159,
71+
"select_ops_per_sec": 13512,
72+
"update_ops_per_sec": 18436,
73+
"delete_ops_per_sec": 81613,
74+
"vacuum_time": 52.013636,
7075
"db_size_mb": "4.13",
71-
"wal_size_mb": "7.41"
76+
"wal_size_mb": "7.41",
77+
"library": "better-sqlite3-multiple-ciphers"
7278
},
7379
"WAL Autocheckpoint 1000": {
7480
"configName": "WAL Autocheckpoint 1000",
75-
"setup_time": 99.084713,
76-
"insert_ops_per_sec": 9543,
77-
"select_ops_per_sec": 13938,
78-
"update_ops_per_sec": 18233,
79-
"delete_ops_per_sec": 87943,
81+
"setup_time": 96.47914,
82+
"insert_ops_per_sec": 10337,
83+
"select_ops_per_sec": 14063,
84+
"update_ops_per_sec": 18638,
85+
"delete_ops_per_sec": 88098,
8086
"vacuum_time": 0,
8187
"db_size_mb": "3.98",
82-
"wal_size_mb": "4.04"
88+
"wal_size_mb": "4.04",
89+
"library": "better-sqlite3-multiple-ciphers"
8390
},
8491
"Cache Size 64MB": {
8592
"configName": "Cache Size 64MB",
86-
"setup_time": 99.076979,
87-
"insert_ops_per_sec": 7168,
88-
"select_ops_per_sec": 14286,
89-
"update_ops_per_sec": 18386,
90-
"delete_ops_per_sec": 87704,
93+
"setup_time": 94.175021,
94+
"insert_ops_per_sec": 10262,
95+
"select_ops_per_sec": 14179,
96+
"update_ops_per_sec": 18360,
97+
"delete_ops_per_sec": 86423,
9198
"vacuum_time": 0,
9299
"db_size_mb": "3.98",
93-
"wal_size_mb": "4.04"
100+
"wal_size_mb": "4.04",
101+
"library": "better-sqlite3-multiple-ciphers"
94102
},
95103
"MMAP 256MB": {
96104
"configName": "MMAP 256MB",
97-
"setup_time": 97.82089,
98-
"insert_ops_per_sec": 9781,
99-
"select_ops_per_sec": 14213,
100-
"update_ops_per_sec": 18183,
101-
"delete_ops_per_sec": 87176,
105+
"setup_time": 93.66001,
106+
"insert_ops_per_sec": 10315,
107+
"select_ops_per_sec": 14308,
108+
"update_ops_per_sec": 18024,
109+
"delete_ops_per_sec": 81813,
110+
"vacuum_time": 0,
111+
"db_size_mb": "3.98",
112+
"wal_size_mb": "4.04",
113+
"library": "better-sqlite3-multiple-ciphers"
114+
},
115+
"better-sqlite3 (no encryption)": {
116+
"configName": "better-sqlite3 (no encryption)",
117+
"setup_time": 26.006537,
118+
"insert_ops_per_sec": 29558,
119+
"select_ops_per_sec": 14647,
120+
"update_ops_per_sec": 50587,
121+
"delete_ops_per_sec": 91491,
102122
"vacuum_time": 0,
103123
"db_size_mb": "3.98",
104-
"wal_size_mb": "4.04"
124+
"wal_size_mb": "4.04",
125+
"library": "better-sqlite3"
105126
}
106127
}
107128
}

0 commit comments

Comments
 (0)