V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
balabalaguguji
V2EX  ›  程序员

吐槽下 koa-mongo 这个中间件, koa 不用好,性能会很低

  •  
  •   balabalaguguji · 2021-07-05 11:27:00 +08:00 · 1447 次点击
    这是一个创建于 1265 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先贴下源码 https://github.com/nswbmw/koa-mongo

    最近看了下 koa2 准别用下,用到 mongodb 就找了个中间件 koa-mongo,看了下源码,发现有问题。

    这个中间件包装了一个数据库连接池,但是 mongodb 官方提供的 nodejs 驱动就已经包含连接池了,按我理解应该是多此一举。

    另外,koa 的中间件是洋葱模型,每个请求都会一行一次,koa-mongo 这个中间件会在每个请求到来都获取一个数据库连接(包括用不到数据库的静态资源请求),然后在 http 请求完成后又主动断开数据库连接。请求一多,那就是频繁的在获取数据库连接然后又断开,严重浪费资源,数据库连接应该是有空闲检查的,空间一段时间才自动断开( mongodb 官方提供的驱动就是有这个空间参数设置)

    合理的做法应该是直接使用官方提供的 nodejs 驱动,不需要再次包装连接池;只在 app 启动时初始化连接数据库,后面直接用。

    如果没理解好洋葱模型,随意加中间件,会导致各种资源浪费。

    以上就是我发现的一些问题,也可能是我理解不到位,说得不对的地方,可以评论告诉我。

    7 条回复    2021-07-05 19:40:22 +08:00
    EPr2hh6LADQWqRVH
        1
    EPr2hh6LADQWqRVH  
       2021-07-05 11:36:03 +08:00
    总体来讲问题不大,连接没有每次都销毁,只是释放而已。

    在高压力环境下,自带的那 5 个连接根本不够看,自己搞个连接池简单直接。

    一道业务请求里搞不好就会用光这 5 个,所以一个请求配一个 mongoClient 问题不大。

    这个连接池库用的也是通用实现,pg 也用这个。
    balabalaguguji
        2
    balabalaguguji  
    OP
       2021-07-05 11:48:10 +08:00
    @avastms #1 自带 5 个?可以自定义的
    EPr2hh6LADQWqRVH
        3
    EPr2hh6LADQWqRVH  
       2021-07-05 11:50:58 +08:00
    @balabalaguguji 你要都自己指定了那还说啥,你也可以把 mongo 的连接池指定为 1 然后用外部这个连接池啊,这货的主要功能就是个连接池,你不想要就不用它算了喽
    4771314
        4
    4771314  
       2021-07-05 17:37:58 +08:00
    没太看懂使用 mongodb 为什么要使用中间件?你的 Node 服务是没有接口、每次请求都需要访问 mongodb ?而且下载量和 start 都这么少的库,lz 也敢使用,是个狼人没错了
    balabalaguguji
        5
    balabalaguguji  
    OP
       2021-07-05 17:39:53 +08:00
    @4771314 #4 看了源码后没敢用了,刚接触,所以都看看
    4771314
        6
    4771314  
       2021-07-05 19:35:39 +08:00
    @balabalaguguji 要使用 mongodb 的话,直接使用官方提供的 mongoose 就可以了
    balabalaguguji
        7
    balabalaguguji  
    OP
       2021-07-05 19:40:22 +08:00
    @4771314 #6 mongoose 并不是官方提供的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2552 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:11 · PVG 11:11 · LAX 19:11 · JFK 22:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.