问个关于 node 和数据库的问题。

2017-06-21 17:30:39 +08:00
 acthtml
  1. node 是单线程,那是不是数据的连接不需要频繁的打开和关闭,只要一个连接就行了?
  2. 如果是这样,那么就不能利用数据库的线程池了?
  3. 性能上有什么影响?
1470 次点击
所在节点    问与答
5 条回复
yuxuan
2017-06-21 17:55:53 +08:00
记得 node 有个 pool 库可以搞连接池的
solee
2017-06-21 18:01:43 +08:00
const Sequelize = require('sequelize');
const logger = require('../logger');

var MySql = {};
var options = {
dialect: 'mysql',
logging: function (sql) {
logger.trace(sql);
},
pool: {
max: 10,
min: 0,
idle: 10000
},
timezone: '+08:00'
};

连接池
cloud107202
2017-06-21 18:04:05 +08:00
1. node 单线程在用户态,v8 里针对 IO 是有线程池的(我的描述不一定很精准)
2. 能利用
3. 没影响

http://liyangready.github.io/2015/08/14/nodejs%E7%9C%9F%E7%9A%84%E6%98%AF%E5%8D%95%E7%BA%BF%E7%A8%8B%E5%90%97%EF%BC%9F/
acthtml
2017-06-21 20:20:07 +08:00
@solee 恩,我也看到有些类库提供这些配置。但是对于第一个问题我还是不明白,在使用数据库中是否需要关闭连接来释放资源,以此来提高性能。
klesh
2017-06-21 23:02:05 +08:00
池是需要的,可以显著提高性能,使用池时一般叫 release , 不叫 close,代表将连接释放回池,实际上池在一定时间内会保持连接给别的代码使用。
node 使用异步模型,一个连接显然是不够的,假定一个请求使用一个连接,池中有十个连接,此时则可同时对十个并发进行处理,若池中只有一个连接,则只能一个个地处理。
若你只使用不 release,则在若干个请求之后程序不再响应。因之后的连接会一直在等待别的请求 release

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370112

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX