V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
acthtml
V2EX  ›  问与答

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

  •  
  •   acthtml · 2017-06-21 17:30:39 +08:00 · 1543 次点击
    这是一个创建于 2711 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. node 是单线程,那是不是数据的连接不需要频繁的打开和关闭,只要一个连接就行了?
    2. 如果是这样,那么就不能利用数据库的线程池了?
    3. 性能上有什么影响?
    5 条回复    2017-06-21 23:02:05 +08:00
    yuxuan
        1
    yuxuan  
       2017-06-21 17:55:53 +08:00
    记得 node 有个 pool 库可以搞连接池的
    solee
        2
    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
        3
    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
        4
    acthtml  
    OP
       2017-06-21 20:20:07 +08:00
    @solee 恩,我也看到有些类库提供这些配置。但是对于第一个问题我还是不明白,在使用数据库中是否需要关闭连接来释放资源,以此来提高性能。
    klesh
        5
    klesh  
       2017-06-21 23:02:05 +08:00 via Android
    池是需要的,可以显著提高性能,使用池时一般叫 release , 不叫 close,代表将连接释放回池,实际上池在一定时间内会保持连接给别的代码使用。
    node 使用异步模型,一个连接显然是不够的,假定一个请求使用一个连接,池中有十个连接,此时则可同时对十个并发进行处理,若池中只有一个连接,则只能一个个地处理。
    若你只使用不 release,则在若干个请求之后程序不再响应。因之后的连接会一直在等待别的请求 release
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2687 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:25 · PVG 20:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.