【问题标题】:What is the difference between MySQL & MySQL2 considering NodeJS考虑到 NodeJS,MySQL 和 MySQL2 有什么区别
【发布时间】:2021-04-24 07:46:33
【问题描述】:

所以我已经阅读了以下帖子“

What the difference between mysql and mysql2 gem

到目前为止,我只使用了 MongoDB 和 NodeJS,我希望能够学习 MySQL 来满足我的任何关系数据库需求。在研究 MySQL 和 NodeJS 时,我发现了 MySQL2 的存储库,它似乎与 MySQL 网站没有任何关系,我假设已经创建了 API,可以更快地使用 NodeJS 和 Ruby 等语言进行开发。从 NodeJS 的角度来看,我假设我仍然在我的服务器上运行常规 MySQL 数据库,但我需要使用这些新的 API 与它进行交互,例如:

https://github.com/sidorares/node-mysql2/blob/master/README.md

我还看到一个网站,他们在其中进行性能基准测试,而 NodeJS 和 MySQL 的性能非常低。和 NodeJS & MySQL2 非常高

此信息的来源: php-nodejs-mysql-and-mongo

来自这篇文章的图片:

问题:我是简单地在我的服务器上使用常规 MySQL 数据库并使用这个 mysql2 API,还是有一个不同的 MySQL 实现可以与这个 API 一起使用?

我已经有 10 年没有使用 MySQL 了。我只用过微软的 SQL Server。所以我严重落后。我已经开始使用 NodeJS,并认为我最好的关系数据库选项是 MySQL,还有什么我应该寻找的吗?

【问题讨论】:

    标签: mysql node.js relational-database mysql2


    【解决方案1】:

    这只是普通人编写的 2 个不同的 API。不同之处在于命令的语法,也可能在于性能,只需安装两者,针对您的目标进行自己的测试,然后选择您认为更适合您的一个。

    这是comparison by NPMCompare

    【讨论】:

    • 好的,所以我假设我需要安装的 2 个 api 是:felixge/node-mysqlsidorares/node-mysql2 另外我需要让 MySQL 与数据库一起运行以从 NodeJS 连接跨度>
    • 我现在明白了。 felixge/node-mysqlsidorares/node-mysql2 都是 api,以便在使用 NodeJS 时与 MySQL 交互。类似于我用来与 MongoDB 交互的驱动程序或 mongodb 模块。我可以使用其中任何一种,但我应该根据自己的需要进行自己的测试,并从中选择要在生产中使用的。我想这就是这里所说的。
    • felixge/node-mysqlsidorares/node-mysql2 在代码上几乎是兼容的,唯一的区别在于 require 部分。您可以阅读felixge/node-mysql 文档,但可以使用sidorares/node-mysql2 运行示例
    • 只是一个旁注,根据我的经验,flexge/node-mysql 不适用于 JSON 类型(JSON_OBJECT、JSON_ARRAY..etc)。实际上,您需要解析查询结果才能真正使用它。相反,sidorares/node-mysql2 似乎在对应列是 JSON 类型时原生解析它,这样可以节省很多时间。
    【解决方案2】:

    https://www.npmjs.com/package/mysql2提取

    "MySQL2 大部分 API 与 mysqljs 兼容,并支持大部分功能。MySQL2 也提供了这些附加功能

    • 更快/更好的性能
    • 准备好的声明
    • MySQL 二进制日志协议
    • MySQL 服务器
    • 对编码和整理的扩展支持
    • Promise 包装器
    • 压缩
    • SSL 和身份验证开关
    • 自定义流
    • 池化”

    只有前两个功能更好:更快、更安全

    【讨论】:

    • 池化也更好 --> 也更快。但是普通的mysql包也有pooling。
    • mysql2 的改进并非微不足道。 mysql2 内置了一个promisified API。你可以尝试自己开发,但这会花费你大量的开发时间。准备好的语句支持也是我转向 mysql2 的主要原因。由于 SQL 注入黑客,它基本上是今天的要求。
    • 你也可以在 mysql 库中使用 promises (async/await)。只需pool.query = util.promisify(pool.query),现在您就可以result = await db.query() 直到您心满意足。
    【解决方案3】:

    在我的项目中实现npm i mysql 依赖项时遇到了很多问题。 首先,如果您遵循 MVC 架构,mysql 在服务器和客户端之间提取和send 数据时会变得乏味。 npm i mysql2 简化了这个过程,就像执行查询一样简单

    对于mysql的依赖 connection.query(sql,(err,res)=>{*some fn here*}) 返回所有行,包括查询的成功结果。 而 mysql2 依赖 connection.execute(sql) 只返回查询结果,而不是行。

    【讨论】:

      【解决方案4】:

      如果您查看图表中用于 mysql 和 mysql2 的源代码,他正在为它们使用 mysql api。唯一的区别是,他每次都关闭了连接。所以要点是不要每次都关闭连接。 mysql2 api 应该更快,但我还没有看到任何数据。

      有用于图形数据的“mysql2”代码。注意api仍然是mysql而不是mysql2:

      var sys = require('sys'),
      http = require('http'),
      mysql = require('mysql')
      client = null;
      
      client = mysql.createClient({
                user: 'root',
                password: '',
      });
      client.query('USE mongo');
      
      http.createServer(function(req, res) {
              client.query(
                        'SELECT * FROM basic WHERE id = '+Math.floor(Math.random()*100000),
                        function selectCb(err, results, fields) {
                          if (err) {
                            res.writeHead(200, {'Content-Type': 'text/html'});
                                res.write('Bad');
                                res.end();
                            throw err;
                          }
      
                          res.writeHead(200, {'Content-Type': 'text/html'});
                              res.write('Gooood');
                              res.end();
                        }
                      );
      }).listen(8080);
      

      【讨论】:

        猜你喜欢
        • 2011-07-21
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 2016-08-12
        相关资源
        最近更新 更多