【问题标题】:NodeJS vs Laravel with Mysql Database which one better in term of performanceNodeJS vs Laravel 与 Mysql 数据库在性能方面哪个更好
【发布时间】:2020-05-29 01:52:49
【问题描述】:

我正在使用 MYSQL 数据库开发 REST 后端,现在我需要选择哪种服务器端语言更好,因为服务器资源(CPU 和 Ram)消耗更少。

例如,我有一个 POST 端点(注册一个新用户帐户)和另一个 GET 端点(以 JSON 格式获取用户信息)。我预计我的网站上的流量会很高,哪种编程语言会消耗更多的服务器资源?

我在 Google 上比较了 NodejS 和 Laravel,我发现一些网站显示了基准测试,而其他网站显示 NodeJS 更好。

【问题讨论】:

  • 每分钟有多少这样的查询?
  • @RickJames 每分钟可以达到 7000+

标签: mysql node.js laravel performance load-balancing


【解决方案1】:

使用基本的 get/set DB 操作,无论您选择哪种语言,都不会花费大量时间。

根据非性能标准选择一种语言,并在出现特定性能问题时解决它们。

当您标记负载平衡时,我假设您的应用程序已经可以水平扩展。

【讨论】:

  • 是的,关于负载平衡,我将在 AWS 中托管我的网站,并设置一个具有自动缩放功能的应用程序负载平衡器。但如您所知,如果启动新实例,AWS 将收取更多费用。我担心的是,如果 nodeJS 像其他人所说的那样消耗更少,这意味着它的潜力更小,需要 aws autoscale 来启动新实例并且成本更高。
  • 以两种方式编写应用程序并自行对其进行基准测试是另一种方式。确保您拥有正确的后端数据 MySQL(在 dba.stackexchange.com 上询问),因为它可能是更大的资源消耗者。
  • 当然,正如你所说,这是个好主意,我会用两种编程语言编写,然后我会通过发送一个循环的 http 请求来进行基准测试。
【解决方案2】:

我像这样构建了自己的 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;

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 2017-08-09
    • 2011-09-30
    • 2015-06-10
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多