Nodejs下今天做的关于 mysql 和 mysql-libmysqlclient 的性能测试
Nodejs下今天做的关于 mysql 和 mysql-libmysqlclient 的性能测试
最近正在做 mysql 的代理服务,苦于 node 下还没有成熟的 module,只能在几个主流的 module 中寻找了。经过大牛们的推荐和多次的压测,mysql-libmysqlclient 应该算是目前性能较好的 module 了,但是对于大数据集(2000 行以后基本上结果就很难看了)的读取还是不太乐观,所以建议不要去用来获取大数据集了,能做分页就分页,以下是压测结果。
mysql 2.0.0-alpha9
读取 1000 次,每次读取 2000 条记录
1.
耗时 10626 ms
每秒 94
2.
耗时 10447 ms
每秒 95
3.
耗时 10602 ms
每秒 94
写入 10000 条记录,每次写入 1 条
1.
耗时 3444 ms
每秒 2903
2.
耗时 3417 ms
每秒 2926
3.
耗时 3384 ms
每秒 2955
mysql-libmysqlclient 1.5.2
读取 1000 次,每次读取 2000 条记录
1.
耗时 4698 ms
每秒 212
2.
耗时 4847 ms
每秒 206
3.
耗时 4802 ms
每秒 208
写入 10000 条记录,每次写入 1 条
1.
耗时 2718 ms
每秒 3679
2.
耗时 2708 ms
每秒 3692
3.
耗时 2666 ms
每秒 3750
Nodejs下今天做的关于 mysql 和 mysql-libmysqlclient 的性能测试
最近正在做 MySQL 的代理服务,苦于 Node.js 下还没有成熟的模块,只能在几个主流的模块中寻找了。经过大牛们的推荐和多次的压测,mysql-libmysqlclient
应该算是目前性能较好的模块了,但是对于大数据集(2000 行以后基本上结果就很难看了)的读取还是不太乐观,所以建议不要用来获取大数据集了,能做分页就分页,以下是压测结果。
mysql 2.0.0-alpha9
读取 1000 次,每次读取 2000 条记录
// 示例代码
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb'
});
let start = Date.now();
for (let i = 0; i < 1000; i++) {
connection.query('SELECT * FROM large_table', function(err, results) {
if (err) throw err;
});
}
connection.end();
console.log(`耗时 ${Date.now() - start} ms`);
写入 10000 条记录,每次写入 1 条
// 示例代码
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb'
});
let start = Date.now();
for (let i = 0; i < 10000; i++) {
connection.query('INSERT INTO test_table SET ?', {name: `Test${i}`, age: 20 + i}, function(err, results) {
if (err) throw err;
});
}
connection.end();
console.log(`耗时 ${Date.now() - start} ms`);
mysql-libmysqlclient 1.5.2
读取 1000 次,每次读取 2000 条记录
// 示例代码
const mysqlLib = require('mysql-libmysqlclient');
const connection = mysqlLib.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb'
});
let start = Date.now();
for (let i = 0; i < 1000; i++) {
connection.query('SELECT * FROM large_table', function(err, results) {
if (err) throw err;
});
}
connection.end();
console.log(`耗时 ${Date.now() - start} ms`);
写入 10000 条记录,每次写入 1 条
// 示例代码
const mysqlLib = require('mysql-libmysqlclient');
const connection = mysqlLib.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb'
});
let start = Date.now();
for (let i = 0; i < 10000; i++) {
connection.query('INSERT INTO test_table SET ?', {name: `Test${i}`, age: 20 + i}, function(err, results) {
if (err) throw err;
});
}
connection.end();
console.log(`耗时 ${Date.now() - start} ms`);
通过上述代码和压测结果可以看出,对于大数据集的读取,mysql
模块的表现较差,而 mysql-libmysqlclient
模块虽然在读取性能上有所提升,但仍然不理想。因此,在实际应用中建议使用分页查询来优化性能。
针对 Node.js 下关于 mysql
和 mysql-libmysqlclient
的性能测试问题,可以总结出以下几点观察和建议:
-
读取性能:
- 使用
mysql
模块进行大量数据(例如 2000 条记录)的读取时,性能相对较低,平均每秒大约 94 到 95 次请求。 - 使用
mysql-libmysqlclient
模块进行同样的读取操作时,性能有所提升,平均每秒约 206 到 208 次请求。
- 使用
-
写入性能:
- 在写入性能方面,
mysql
模块的表现优于mysql-libmysqlclient
。使用mysql
模块写入 10000 条记录时,平均每秒处理约 2900 到 2950 条记录。 - 而使用
mysql-libmysqlclient
模块时,写入速度更快,平均每秒处理约 3670 到 3750 条记录。
- 在写入性能方面,
建议
- 对于需要读取大量数据的情况(如超过 2000 条记录),考虑使用分页技术,以避免一次性加载大量数据导致的性能瓶颈。
- 如果读取性能是关键指标,可以优先考虑
mysql-libmysqlclient
模块,尽管其性能相比mysql
模块仍有差距,但在某些场景下可能更为合适。 - 对于频繁的写入操作,
mysql
模块通常表现更好。
示例代码
为了帮助理解如何使用这两个模块进行基本的读取和写入操作,这里提供简单的示例代码。
读取示例
const mysql = require('mysql');
// 创建数据库连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});
connection.connect();
connection.query('SELECT * FROM your_table LIMIT 2000', (error, results) => {
if (error) throw error;
console.log(results);
});
connection.end();
写入示例
const mysql = require('mysql');
// 创建数据库连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});
connection.connect();
for (let i = 0; i < 10000; i++) {
connection.query('INSERT INTO your_table SET ?', {column_name: 'value'}, (error) => {
if (error) throw error;
});
}
connection.end();
这些代码示例展示了如何使用 mysql
模块进行基本的读取和写入操作。你可以根据实际需求调整查询语句和表名。