Benchmarks for the MariaDB Node.js Connector are done using the benchmark package. You can find the source code for our benchmarks in the benchmarks/
folder.
You can run benchmarks using npm. To run it on the mariadb
Connector only, use the following command:
$ npm install microtime
$ npm run benchmark
Npm runs a series on the MariaDB Server then returns the execution times.
While this may give you a rough idea of how it performs, it's better to compare to other MySQL connector packages, like mysql and mysql2 packages.
The mysql package doesn't implement Promise, so using the promise-mysql package.
run the benchmarks:
$ npm install microtime
$ npm install mysql mysql2 promise-mysql
$ npm run benchmark
Benchmarks runs on two Digital Ocean hosts with 16GB of memory and 4 CPU's, running Ubuntu 22.04.
- Server Host: MariaDB 10.6 under the default configuration, just commenting bind-address to permit access from other server.
- Client Host: Node.js version v18.13.0 (change the ./test/conf.js to set connection information)
The MariaDB Node.js Connector was then tested alongside the following MySQL connectors:
- mysql: version 2.18.1
- mysql2: version 3.1.0
- promise-mysql: version 5.2.0
in order to have stable results, environment variable PERF_SAMPLES is set to 500:
set PERF_SAMPLES=500
root@ubuntu-g-4vcpu-16gb-sfo3-cli:~/mariadb-connector-nodejs# npm run benchmark
mariadb@3.1.0 benchmark node benchmarks/benchmarks-all.js
{ user: 'root', database: 'testn', host: '137.184.6.237', connectTimeout: 2000, port: 3306, charset: 'utf8mb4', trace: false }
do 1
mysql : 7,063.6 ops/s ± 0.4%
mysql2 : 6,465.3 ops/s ± 0.6% ( -8.5% )
mariadb : 8,531.9 ops/s ± 0.3% ( +20.8% )
do 1000 parameter
mysql : 2,410.3 ops/s ± 0.3%
mysql2 : 2,279.2 ops/s ± 0.6% ( -5.4% )
mariadb : 2,582 ops/s ± 0.6% ( +7.1% )
do <random number> with pool
mysql : 6,726.4 ops/s ± 0.5%
mysql2 : 6,150.5 ops/s ± 0.8% ( -8.6% )
mariadb : 7,463.2 ops/s ± 0.5% ( +11% )
insert 10 VARCHAR(100)
mysql : 3,799.9 ops/s ± 0.6%
mysql2 : 3,557 ops/s ± 0.6% ( -6.4% )
mariadb : 4,027.9 ops/s ± 0.5% ( +6% )
100 * insert CHAR(100) using batch (for mariadb) or loop for other driver (batch doesn't exists)
mysql : 67.8 ops/s ± 0.3%
mysql2 : 66.1 ops/s ± 0.7% ( -2.4% )
mariadb : 3,270.8 ops/s ± 1.3% ( +4,725% )
3 * insert 100 characters pipelining
mysql : 2,366 ops/s ± 0.5%
mysql2 : 2,066.5 ops/s ± 0.6% ( -12.7% )
mariadb : 4,447.5 ops/s ± 1.5% ( +88% )
select 1000 rows of CHAR(32)
mysql : 1,013.8 ops/s ± 0.5%
mysql2 : 1,159.7 ops/s ± 1.3% ( +14.4% )
mariadb : 1,630.6 ops/s ± 0.5% ( +60.8% )
select 1000 rows of CHAR(32) - BINARY
mysql2 : 1,125.2 ops/s ± 1.7%
mariadb : 1,421.4 ops/s ± 0.6% ( +26.3% )
select 100 int
mysql : 2,287.9 ops/s ± 0.6%
mysql2 : 1,795.3 ops/s ± 1.6% ( -21.5% )
mariadb : 3,219.9 ops/s ± 0.8% ( +40.7% )
select 100 int - BINARY
mysql2 : 1,821.6 ops/s ± 1.7%
mariadb : 5,428.1 ops/s ± 0.6% ( +198% )
select 1 int + char(32)
mysql : 6,281.1 ops/s ± 0.6%
mysql2 : 5,839 ops/s ± 1% ( -7% )
mariadb : 6,862.8 ops/s ± 0.6% ( +9.3% )
select 1 int + char(32) with pool
mysql : 6,572.1 ops/s ± 0.7%
mysql2 : 5,717.6 ops/s ± 1.6% ( -13% )
mariadb : 7,297 ops/s ± 0.6% ( +11% )
select 1 random int + char(32)
mysql : 6,142.2 ops/s ± 0.6%
mysql2 : 2,964.6 ops/s ± 1.2% ( -51.7% )
mariadb : 6,781 ops/s ± 0.6% ( +10.4% )
select now()
mysql : 6,942.1 ops/s ± 0.7%
mysql2 : 6,135.5 ops/s ± 1.1% ( -11.6% )
mariadb : 7,640.5 ops/s ± 0.6% ( +10.1% )
root@ubuntu-g-4vcpu-16gb-sfo3-cli:~/mariadb-connector-nodejs# npm run benchmark
mariadb@3.1.0 benchmark node benchmarks/benchmarks-all.js
{ user: 'root', database: 'testn', socketPath: '/run/mysqld/mysqld.sock', connectTimeout: 2000, charset: 'utf8mb4', trace: false }
do 1
mysql : 26,415.6 ops/s ± 1.2%
mysql2 : 21,160.5 ops/s ± 1.2% ( -19.9% )
mariadb : 34,484.5 ops/s ± 1.2% ( +30.5% )
do 1000 parameter
mysql : 3,111.2 ops/s ± 1.1%
mysql2 : 3,071.3 ops/s ± 1% ( -1.3% )
mariadb : 3,470.3 ops/s ± 1.1% ( +11.5% )
do <random number> with pool
mysql : 24,798.3 ops/s ± 1.2%
mysql2 : 20,368.8 ops/s ± 1.3% ( -17.9% )
mariadb : 30,820.4 ops/s ± 1.1% ( +24.3% )
insert 10 VARCHAR(100)
mysql : 7,043.9 ops/s ± 1.1%
mysql2 : 5,988.2 ops/s ± 1.6% ( -15% )
mariadb : 7,734.1 ops/s ± 1.3% ( +9.8% )
100 * insert CHAR(100) using batch (for mariadb) or loop for other driver (batch doesn't exists)
mysql : 219 ops/s ± 0.9%
mysql2 : 173.6 ops/s ± 1.4% ( -20.7% )
mariadb : 6,489.8 ops/s ± 1.2% ( +2,863% )
3 * insert 100 characters pipelining
mysql : 6,940.5 ops/s ± 1%
mysql2 : 6,111.9 ops/s ± 1.5% ( -11.9% )
mariadb : 12,327.3 ops/s ± 1.4% ( +77.6% )
select 1000 rows of CHAR(32)
mysql : 1,140.7 ops/s ± 0.9%
mysql2 : 1,474.5 ops/s ± 1.5% ( +29.3% )
mariadb : 2,185.2 ops/s ± 1.1% ( +91.6% )
select 1000 rows of CHAR(32) - BINARY
mysql2 : 1,439 ops/s ± 1.6%
mariadb : 1,797.5 ops/s ± 0.6% ( +24.9% )
select 100 int
mysql : 2,738.7 ops/s ± 1.3%
mysql2 : 2,404.9 ops/s ± 1.3% ( -12.2% )
mariadb : 5,650.8 ops/s ± 1.4% ( +106.3% )
select 100 int - BINARY
mysql2 : 2,473.4 ops/s ± 1.3%
mariadb : 10,533 ops/s ± 1.7% ( +325.9% )
select 1 int + char(32)
mysql : 19,504.9 ops/s ± 1%
mysql2 : 15,340.4 ops/s ± 1.5% ( -21.4% )
mariadb : 24,799.3 ops/s ± 0.4% ( +27.1% )
select 1 int + char(32) with pool
mysql : 19,272 ops/s ± 1%
mysql2 : 14,560.2 ops/s ± 1.7% ( -24.4% )
mariadb : 24,219.4 ops/s ± 0.8% ( +25.7% )
select 1 random int + char(32)
mysql : 17,599.9 ops/s ± 1.4%
mysql2 : 4,828.1 ops/s ± 1.5% ( -72.6% )
mariadb : 21,099.5 ops/s ± 1.4% ( +19.9% )
select now()
mysql : 18,902.6 ops/s ± 1.8%
mysql2 : 15,491.6 ops/s ± 1.6% ( -18% )
mariadb : 25,456.7 ops/s ± 0.6% ( +34.7% )