NodeJS vs Laravel with Mysql Database 哪一个在性能方面更好
NodeJS vs Laravel with Mysql Database which one better in term of performance
我正在开发一个带有 MYSQL 数据库的 REST 后端,现在我需要选择哪种服务器端语言在消耗更少的服务器资源(CPU 和 Ram)方面更好。
例如,我有一个 POST 端点(注册一个新用户帐户)和另一个 GET 端点(以 JSON 格式获取用户信息)。我预计我的网站会出现高流量,哪种编程语言会消耗更多的服务器资源?
我用谷歌搜索了 NodejS 和 Laravel 之间的比较,我发现一些网站显示基准测试有利于 laravel 和其他网站显示 NodeJS 更好。
对于基本的 get/set 数据库操作,无论您选择哪种语言,都不会花费大量时间。
根据非性能标准选择一种语言,并解决出现的特定性能问题。
由于您标记了负载平衡,因此我假设您的应用程序已经可以水平扩展。
我自己构建了 sql 脚本编写器,这对我的项目来说非常快,因为我以前的 PHP 后端太慢(在我的情况下)
const mysqlLib = require('mysql');
const ENV = require('../configs/env').ENV;
const database = ENV.database;
const mysql = mysqlLib.createPool(database);
function executeQuery(query) {
return new Promise((resolve, reject) => {
mysql.query(query, (err, result, fields) => {
if (err) {
console.log(query);
return reject(err);
}
resolve(result);
});
});
}
function executeQueryGetFirst(query) {
return new Promise((resolve, reject) => {
mysql.query(query, (err, result, fields) => {
if (err) {
console.log(query);
return reject(err);
}
result = JSON.parse(JSON.stringify(result));
if (result.length == 0) {
resolve(null);
} else {
resolve(result[0]);
}
});
});
}
var Database = {
getById(table, id) {
var query = '';
query += 'SELECT * FROM ' + table + ' ';
query += 'WHERE Id = ' + id;
query += ' LIMIT 1';
return executeQueryGetFirst(query);
},
getAllById(table, id) {
var query = '';
query += 'SELECT * FROM ' + table + ' ';
query += 'WHERE Id = ' + id;
return executeQuery(query);
},
getByAttributes(table, attributes) {
var query = 'SELECT * FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
if (attributes[prop] == null) {
whereQuery += prop + ' IS NULL';
} else {
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
}
query += ' WHERE ' + whereQuery;
query += ' LIMIT 1';
return executeQueryGetFirst(query);
},
getAllByAttributes(table, attributes) {
var query = 'SELECT * FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
if (attributes[prop] == null) {
whereQuery += prop + ' IS NULL';
} else {
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
}
query += ' WHERE ' + whereQuery;
return executeQuery(query);
},
getAll(table) {
var query = 'SELECT * FROM ' + table;
return executeQuery(query);
},
add(table, attributes) {
var insertName = '(Id';
var insertData = '(NULL';
for (prop in attributes) {
var value = attributes[prop];
if (value != null) {
value = '"' + value + '"';
}
insertName += ', ' + prop;
insertData += ', ' + value;
}
insertName += ')';
insertData += ')';
var query = 'INSERT INTO ' + table + ' ' + insertName + ' VALUES ' + insertData;
return executeQuery(query);
},
updateByID(table, id, attributes) {
var query = 'UPDATE ' + table;
var setQuery = '';
for (prop in attributes) {
if (setQuery != '') {
setQuery += ', ';
}
setQuery += prop + ' = "' + attributes[prop] + '"';
}
query += ' SET ' + setQuery + ' WHERE Id = ' + id;
return executeQuery(query);
},
updateByAttributes(table, findAttributes, attributes) {
var query = 'UPDATE ' + table;
var setQuery = '';
var whereQuery = '';
for (prop in attributes) {
if (setQuery != '') {
setQuery += ', ';
}
setQuery += prop + ' = "' + attributes[prop] + '"';
}
for (prop in findAttributes) {
if (whereQuery != '') {
whereQuery += ', ';
}
whereQuery += prop + ' = "' + findAttributes[prop] + '"';
}
query += ' SET ' + setQuery + ' WHERE ' + whereQuery;
return executeQuery(query);
},
deleteById(table, id) {
var query = 'DELETE FROM ' + table + ' WHERE Id = ' + id;
return executeQuery(query);
},
deleteByAttributes(table, attributes) {
var query = 'DELETE FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
query += ' WHERE ' + whereQuery;
return executeQuery(query);
}
}
Database.executeQuery = executeQuery;
Database.executeQueryGetFirst = executeQueryGetFirst;
exports.Database = Database;
环境配置
var ENV = {
isDev: true,
database: {
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '',
database: 'your_database'
}
}
exports.ENV = ENV;
exports.ENV.port = ENV.isDev ? 15001 : 8887;
我正在开发一个带有 MYSQL 数据库的 REST 后端,现在我需要选择哪种服务器端语言在消耗更少的服务器资源(CPU 和 Ram)方面更好。
例如,我有一个 POST 端点(注册一个新用户帐户)和另一个 GET 端点(以 JSON 格式获取用户信息)。我预计我的网站会出现高流量,哪种编程语言会消耗更多的服务器资源?
我用谷歌搜索了 NodejS 和 Laravel 之间的比较,我发现一些网站显示基准测试有利于 laravel 和其他网站显示 NodeJS 更好。
对于基本的 get/set 数据库操作,无论您选择哪种语言,都不会花费大量时间。
根据非性能标准选择一种语言,并解决出现的特定性能问题。
由于您标记了负载平衡,因此我假设您的应用程序已经可以水平扩展。
我自己构建了 sql 脚本编写器,这对我的项目来说非常快,因为我以前的 PHP 后端太慢(在我的情况下)
const mysqlLib = require('mysql');
const ENV = require('../configs/env').ENV;
const database = ENV.database;
const mysql = mysqlLib.createPool(database);
function executeQuery(query) {
return new Promise((resolve, reject) => {
mysql.query(query, (err, result, fields) => {
if (err) {
console.log(query);
return reject(err);
}
resolve(result);
});
});
}
function executeQueryGetFirst(query) {
return new Promise((resolve, reject) => {
mysql.query(query, (err, result, fields) => {
if (err) {
console.log(query);
return reject(err);
}
result = JSON.parse(JSON.stringify(result));
if (result.length == 0) {
resolve(null);
} else {
resolve(result[0]);
}
});
});
}
var Database = {
getById(table, id) {
var query = '';
query += 'SELECT * FROM ' + table + ' ';
query += 'WHERE Id = ' + id;
query += ' LIMIT 1';
return executeQueryGetFirst(query);
},
getAllById(table, id) {
var query = '';
query += 'SELECT * FROM ' + table + ' ';
query += 'WHERE Id = ' + id;
return executeQuery(query);
},
getByAttributes(table, attributes) {
var query = 'SELECT * FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
if (attributes[prop] == null) {
whereQuery += prop + ' IS NULL';
} else {
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
}
query += ' WHERE ' + whereQuery;
query += ' LIMIT 1';
return executeQueryGetFirst(query);
},
getAllByAttributes(table, attributes) {
var query = 'SELECT * FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
if (attributes[prop] == null) {
whereQuery += prop + ' IS NULL';
} else {
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
}
query += ' WHERE ' + whereQuery;
return executeQuery(query);
},
getAll(table) {
var query = 'SELECT * FROM ' + table;
return executeQuery(query);
},
add(table, attributes) {
var insertName = '(Id';
var insertData = '(NULL';
for (prop in attributes) {
var value = attributes[prop];
if (value != null) {
value = '"' + value + '"';
}
insertName += ', ' + prop;
insertData += ', ' + value;
}
insertName += ')';
insertData += ')';
var query = 'INSERT INTO ' + table + ' ' + insertName + ' VALUES ' + insertData;
return executeQuery(query);
},
updateByID(table, id, attributes) {
var query = 'UPDATE ' + table;
var setQuery = '';
for (prop in attributes) {
if (setQuery != '') {
setQuery += ', ';
}
setQuery += prop + ' = "' + attributes[prop] + '"';
}
query += ' SET ' + setQuery + ' WHERE Id = ' + id;
return executeQuery(query);
},
updateByAttributes(table, findAttributes, attributes) {
var query = 'UPDATE ' + table;
var setQuery = '';
var whereQuery = '';
for (prop in attributes) {
if (setQuery != '') {
setQuery += ', ';
}
setQuery += prop + ' = "' + attributes[prop] + '"';
}
for (prop in findAttributes) {
if (whereQuery != '') {
whereQuery += ', ';
}
whereQuery += prop + ' = "' + findAttributes[prop] + '"';
}
query += ' SET ' + setQuery + ' WHERE ' + whereQuery;
return executeQuery(query);
},
deleteById(table, id) {
var query = 'DELETE FROM ' + table + ' WHERE Id = ' + id;
return executeQuery(query);
},
deleteByAttributes(table, attributes) {
var query = 'DELETE FROM ' + table;
var whereQuery = '';
for (prop in attributes) {
if (whereQuery != '') {
whereQuery += ' AND ';
}
whereQuery += prop + ' = "' + attributes[prop] + '"';
}
query += ' WHERE ' + whereQuery;
return executeQuery(query);
}
}
Database.executeQuery = executeQuery;
Database.executeQueryGetFirst = executeQueryGetFirst;
exports.Database = Database;
环境配置
var ENV = {
isDev: true,
database: {
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: '',
database: 'your_database'
}
}
exports.ENV = ENV;
exports.ENV.port = ENV.isDev ? 15001 : 8887;