
Security News
npm ‘is’ Package Hijacked in Expanding Supply Chain Attack
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
modernc.org/sqlite-bench
This repository is a modification of go-sqlite-bench, forked at 4df8bfd.
For the non database/sql drivers category please see modernc.org/sqlite-bench2
[[TOC]]
These drivers are benchmarked
mattn, github.com/mattn/go-sqlite3@v1.14.28
, a CGO-based solution.
modernc, modernc.org/sqlite@v1.38.0
, a pure Go solution
based on the SQLite C code transpilled to Go using ccgo/v4
.
ncruces, github.com/ncruces/go-sqlite3@v0.26.1
, a pure Go solution using wazero
.
Go version: go1.24.3
Do not trust benchmarks, write your own. These specific benchmarks are modelled after someone's very own database usage scenarios. Your scenarios may be totally different.
Each test is run twice, the recorded values are the averages of the two runs. This is not very scientific.
The test database consist of the following tables and indices:
PRAGMA journal_mode=DELETE;
PRAGMA synchronous=FULL;
PRAGMA foreign_keys=1;
PRAGMA busy_timeout=5000;
CREATE TABLE users (
id INTEGER PRIMARY KEY NOT NULL,
created INTEGER NOT NULL,
email TEXT NOT NULL,
active INTEGER NOT NULL);
CREATE INDEX users_created ON users(created);
CREATE TABLE articles (
id INTEGER PRIMARY KEY NOT NULL,
created INTEGER NOT NULL,
userId INTEGER NOT NULL REFERENCES users(id),
text TEXT NOT NULL);
CREATE INDEX articles_created ON articles(created);
CREATE INDEX articles_userId ON articles(userId);
CREATE TABLE comments (
id INTEGER PRIMARY KEY NOT NULL,
created INTEGER NOT NULL,
articleId INTEGER NOT NULL REFERENCES articles(id),
text TEXT NOT NULL);
CREATE INDEX comments_created ON comments(created);
CREATE INDEX comments_articleId ON comments(articleId);
Result times are measured in milliseconds. Lower numbers indicate better performance.
Insert 1 million user rows in one database transaction. Then query all users once.
Insert 200 users in one database transaction. Then insert 20000 articles (100 articles for each user) in another transaction. Then insert 400000 comments (20 comments for each article) in another transaction. Then query all users, articles and comments in one big JOIN statement.
Insert N users in one database transaction. Then query all users 1000 times. This benchmark is used to simluate a read-heavy use case.
Insert 10000 users with N bytes of row content. Then query all users. This benchmark is used to simluate reading of large (gigabytes) databases.
Insert one million users. Then have N goroutines query all users. This benchmark is used to simulate concurrent reads.
On 32 bit architectures and on the linux/ppc64le builder - to avoid OOM
Mistakes happen. If you find anything wrong about the results please report the problem at the issue tracker, thank you.
The best time in every test, shown in bold in the tables below individual graphs, is worth one point. The scorecard shows where and how many points were awarded to each benchmarked package.
Total score ties are ranked alphabetically. Please read those as one shared rank.
This score is an ad hoc aggregate metric. Its usefulness is possibly at most in showing how the scores may evolve in time when new, improved versions of packages will get benchmarked.
The time results for the particular OS and HW provide a more detailed info.
Total | Simple | Complex | Many | Large | Concurrent | |
---|---|---|---|---|---|---|
1. modernc | 122 | 16 | 14 | 43 | 2 | 47 |
2. mattn | 66 | 16 | 16 | 5 | 29 | 0 |
3. ncruces | 20 | 0 | 2 | 0 | 17 | 1 |
Disclaimer: The score and the ranking do not show how will any package perform in your particular application on a particular system. Additionally, empirically the scores fluctuate as much as about +/- 10 points. It's complicatd to better stabilize the results to be more precise and reliable. On some machines the tests run for many hours already with n = 2.
Simple | insert | query |
---|---|---|
mattn | *7891 | 4431 |
modernc | 28568 | *2244 |
ncruces | 20625 | 3057 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *4681 | 6314 |
modernc | 14961 | *3619 |
ncruces | 11202 | 4362 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 124 | 500 | 3930 |
modernc | *98 | *268 | *1927 |
ncruces | 147 | 390 | 2618 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | 655 | 1573 | 4851 |
modernc | 1123 | 1700 | 6084 |
ncruces | *653 | *1209 | *4044 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 4724 | 4948 | 9975 |
modernc | *3058 | *3149 | *5897 |
ncruces | 3594 | 3939 | 7618 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *1209 | 783 |
modernc | 3817 | *550 |
ncruces | 2097 | 578 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *677 | 1004 |
modernc | 2150 | 865 |
ncruces | 1300 | *861 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 18 | 82 | 737 |
modernc | *17 | *60 | *515 |
ncruces | 26 | 71 | 537 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | 306 | 730 | 2976 |
modernc | 245 | 414 | 3228 |
ncruces | *146 | *268 | *1706 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 932 | 1019 | 1964 |
modernc | *645 | *752 | 1559 |
ncruces | 666 | 760 | *1279 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *2622 | 1739 |
modernc | 7128 | *1310 |
ncruces | 4675 | 1613 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *1567 | 2064 |
modernc | 3857 | *1630 |
ncruces | 3025 | 1995 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | *29 | 183 | 1674 |
modernc | 39 | *114 | *1045 |
ncruces | 51 | 205 | 2084 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *277 | 818 | 3748 |
modernc | 688 | 1274 | 4450 |
ncruces | 337 | *672 | *1287 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 1956 | 3982 | 7622 |
modernc | *1322 | *2585 | *5079 |
ncruces | 1733 | 3523 | 6951 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *39404 | 29174 |
modernc | 137826 | *14007 |
ncruces | 60280 | 18400 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *21108 | 39047 |
modernc | 75486 | *20364 |
ncruces | 37226 | 21151 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 724 | 3631 | 25420 |
modernc | *513 | *1555 | *12701 |
ncruces | 529 | 2046 | 17130 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *5855 | 9077 | 19539 |
modernc | 10968 | 14736 | 29899 |
ncruces | 5938 | *7981 | *17546 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 36410 | 70713 | 133161 |
modernc | *16998 | *32698 | *65793 |
ncruces | 17328 | 39550 | 83330 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *2958 | 2379 |
modernc | 8509 | *1701 |
ncruces | 156520 | 21787 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *1628 | 2755 |
modernc | 4644 | *2268 |
ncruces | 106928 | 47603 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 40 | 239 | 2230 |
modernc | *37 | *169 | *1524 |
ncruces | 805 | 2758 | 22240 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *59 | *130 | *202 |
modernc | 168 | 257 | 512 |
ncruces | 244 | 435 | 608 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 645 | 1349 | 2779 |
modernc | *511 | *988 | *2021 |
ncruces | 5595 | 11304 | 22276 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *8450 | 4142 |
modernc | 23970 | *3077 |
ncruces | 14160 | 4092 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *4347 | 4939 |
modernc | 13275 | 5100 |
ncruces | 8187 | *4609 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | *160 | *510 | *4948 |
modernc | 229 | 622 | 5010 |
ncruces | 238 | 866 | 5114 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *700 | *1247 | 17798 |
modernc | 1824 | 3066 | 5747 |
ncruces | 1121 | 2130 | *3752 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 4729 | 8704 | 17515 |
modernc | *3146 | *6985 | *14006 |
ncruces | 4659 | 9789 | 19257 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *2514 | 1730 |
modernc | 7387 | *1124 |
ncruces | 4394 | 1622 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *1395 | 2104 |
modernc | 4249 | *1725 |
ncruces | 2643 | 2053 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 32 | 178 | 2556 |
modernc | *29 | *108 | *1692 |
ncruces | 52 | 173 | 2662 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *296 | *409 | *942 |
modernc | 873 | 1568 | 2343 |
ncruces | 312 | 511 | 1011 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 1990 | 2091 | 2233 |
modernc | *1231 | *1428 | *1605 |
ncruces | 1708 | 1823 | 1917 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *20187 | 15741 |
modernc | 58909 | *12982 |
ncruces | 1094710 | 164053 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *10218 | 16378 |
modernc | 30537 | *14640 |
ncruces | 751774 | 345544 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 237 | 1534 | 15106 |
modernc | *231 | *1268 | *12339 |
ncruces | 5607 | 20132 | 167370 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *285 | *426 | *648 |
modernc | 673 | 1046 | 2235 |
ncruces | 1671 | 2217 | 3785 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 4494 | 5109 | 10056 |
modernc | *3728 | *4205 | *8200 |
ncruces | 41776 | 42895 | 87398 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *3709 | 2642 |
modernc | 12237 | *1912 |
ncruces | 8148 | 2018 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *1934 | 3120 |
modernc | 6634 | *2589 |
ncruces | 4572 | 2672 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 44 | 245 | 2389 |
modernc | *42 | *179 | *1727 |
ncruces | 74 | 235 | 1923 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *219 | *420 | 2554 |
modernc | 564 | 946 | 1711 |
ncruces | 297 | 520 | *971 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 2868 | 3284 | 6498 |
modernc | *2143 | *2572 | *5158 |
ncruces | 2274 | 2872 | 5985 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *5798 | 4625 |
modernc | 20071 | *3272 |
ncruces | 361793 | 47983 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *2866 | 5273 |
modernc | 10608 | *4234 |
ncruces | 237559 | 100398 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 85 | 456 | 4195 |
modernc | *82 | *340 | *2827 |
ncruces | 1720 | 5917 | 48492 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *297 | *545 | *939 |
modernc | 857 | 1355 | 2166 |
ncruces | 1955 | 2690 | 4160 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 4844 | 5628 | 11401 |
modernc | *3654 | *4209 | *8391 |
ncruces | 48384 | 49012 | 98137 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *7137 | 5410 |
modernc | 20973 | *4508 |
ncruces | 363092 | 54340 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *3823 | 6097 |
modernc | 11540 | *5680 |
ncruces | 246499 | 116868 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 84 | 538 | 5177 |
modernc | *82 | *456 | *4308 |
ncruces | 1720 | 6484 | 54842 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *88 | *147 | *285 |
modernc | 161 | 274 | 534 |
ncruces | 480 | 726 | 1171 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 1717 | 3435 | 6887 |
modernc | *1255 | *2697 | *5334 |
ncruces | 13887 | 27783 | 55737 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *35384 | 26821 |
modernc | 123109 | *19825 |
ncruces | 2411735 | 357051 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *20918 | 30419 |
modernc | 71231 | *23014 |
ncruces | 1618813 | 764016 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 465 | 2616 | 25485 |
modernc | *431 | *1892 | *17365 |
ncruces | 11609 | 41905 | 374722 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *5201 | *9005 | *17502 |
modernc | 12427 | 23311 | 46925 |
ncruces | 16805 | 29055 | 50607 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 30305 | 37124 | 75232 |
modernc | *24408 | *29295 | *56255 |
ncruces | 376824 | 380630 | 743924 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *48216 | 33186 |
modernc | 161101 | *21763 |
ncruces | 1816362 | 284892 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *26270 | 35152 |
modernc | 89195 | *26467 |
ncruces | 1216654 | 589756 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 770 | 3391 | 29258 |
modernc | *675 | *2289 | *17638 |
ncruces | 9102 | 32869 | 272683 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *7870 | *15708 | *24232 |
modernc | 18054 | 27540 | 60216 |
ncruces | 18563 | 30399 | 64134 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 45534 | 88767 | 178996 |
modernc | *23734 | *46592 | *90265 |
ncruces | 295250 | 582604 | 1155901 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *3464 | 2862 |
modernc | 13122 | *2050 |
ncruces | 259547 | 34022 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *2330 | 3873 |
modernc | 7014 | *3453 |
ncruces | 174722 | 76433 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | *71 | 335 | 3083 |
modernc | 89 | *318 | *2333 |
ncruces | 1153 | 4668 | 37405 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | *173 | 6436 | 21951 |
modernc | 273 | *496 | 24265 |
ncruces | 509 | 686 | *20564 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 587 | 1263 | 2490 |
modernc | *483 | *986 | *1887 |
ncruces | 5753 | 11059 | 22028 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *2906 | 2144 |
modernc | 9673 | *1418 |
ncruces | 6186 | 1732 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *1704 | 2520 |
modernc | 5590 | *2149 |
ncruces | 4042 | 2493 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 99 | 266 | 2046 |
modernc | *77 | *184 | *1334 |
ncruces | 138 | 263 | 1716 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | 2588 | 4768 | 17242 |
modernc | 903 | 1931 | *7857 |
ncruces | *744 | *1483 | 17187 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 2542 | 5002 | 9973 |
modernc | *1941 | *3647 | *7290 |
ncruces | 2004 | 4162 | 8426 |
Lower numbers are better. *
Scorecard point awarded.
Simple | insert | query |
---|---|---|
mattn | *27507 | 9376 |
modernc | 49023 | *5796 |
ncruces | 36112 | 8732 |
Lower numbers are better. *
Scorecard point awarded.
Complex | insert | query |
---|---|---|
mattn | *16030 | 9514 |
modernc | 26994 | *6809 |
ncruces | 20036 | 8110 |
Lower numbers are better. *
Scorecard point awarded.
Many | query/N=10 | query/N=100 | query/N=1000 |
---|---|---|---|
mattn | 545 | 1392 | 9180 |
modernc | *390 | *884 | *5440 |
ncruces | 784 | 1530 | 8863 |
Lower numbers are better. *
Scorecard point awarded.
Large | query/N=50000 | query/N=100000 | query/N=200000 |
---|---|---|---|
mattn | 5035 | *5720 | 17142 |
modernc | 5216 | 10438 | 50866 |
ncruces | *4017 | 8594 | *16593 |
Lower numbers are better. *
Scorecard point awarded.
Concurrent | query/N=2 | query/N=4 | query/N=8 |
---|---|---|---|
mattn | 8898 | 9836 | 19335 |
modernc | *6513 | *7388 | *15065 |
ncruces | 10435 | 10605 | 20925 |
Lower numbers are better. *
Scorecard point awarded.
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
Security News
A critical flaw in the popular npm form-data package could allow HTTP parameter pollution, affecting millions of projects until patched versions are adopted.
Security News
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.