gpt4 book ai didi

mysql - 使用 Node 和 MySQL/MariaDB 构建可扩展的 API

转载 作者:行者123 更新时间:2023-11-29 00:11:00 25 4
gpt4 key购买 nike

在使用依赖于 MySQL(或者在我的例子中是 MariaDB)的 Node.js 构建 API 或 Web 应用程序时,处理和管理连接的最佳实践是什么?

根据 node-mysql 的文档,似乎有两种方法可以使用:

var connection = mysql.createConnection({...});

app.get("/", function(req, res) {
connection.query("SELECT * FROM ....", function(error, result) {
res.json(result);
});
});

-- 或--

var pool = mysql.createPool({...});

app.get("/", function(req, res) {
pool.getConnection(error, connection) {
if (error) {
console.log("Error getting new connection from pool");
} else {
connection.query("SELECT * FROM ....", function(error, result) {
connection.release();
res.json(result);
});
}
});
});

对我来说,使用第二个选项最有意义,因为它应该根据需要使用尽可能多的连接,而不是依赖单个连接。但是,我在使用具有多个路由的池时遇到了问题,即每个路由从池中获取一个新连接,执行查询,然后将其释放回池中。每次我从池中获取连接、使用它并释放它时,MySQL 中似乎仍有一个进程在等待另一个请求。最终,这些进程在 MySQL 中累积(通过运行 SHOW PROCESSLIST 可见)并且应用程序不再能够从池中检索连接。

我已采用第一种方法,因为它有效并且我的应用程序不会崩溃,但它似乎不是一个可靠的解决方案。然而,node-mariasql看起来很有希望,但我不知道这是否会比我目前使用的更好。

我的问题是:在构建几乎每个请求都严重依赖 SQL 查询的 API 或 Web 应用程序时,处理/构建 MySQL 连接的最佳方法是什么?

最佳答案

connection.release() 更改为 connection.destory() 解决了我的问题。我不确定前者应该做什么,但后者的行为符合预期并且实际上删除了连接。这意味着一旦连接被使用完毕,它就会终止 MySQL 进程并在需要时创建另一个进程。这也意味着许多查询可以同时访问 API,慢速查询不会阻止新查询。

关于mysql - 使用 Node 和 MySQL/MariaDB 构建可扩展的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com