• 请不要在回答技术问题时复制粘贴 AI 生成的内容
balabalaguguji
V2EX  ›  程序员

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

  •  
  •   balabalaguguji · Jul 5, 2021 · 1882 views
    This topic created in 1865 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

    这个连接池库用的也是通用实现,pg 也用这个。
    balabalaguguji
        2
    balabalaguguji  
    OP
       Jul 5, 2021
    @avastms #1 自带 5 个?可以自定义的
    EPr2hh6LADQWqRVH
        3
    EPr2hh6LADQWqRVH  
       Jul 5, 2021
    @balabalaguguji 你要都自己指定了那还说啥,你也可以把 mongo 的连接池指定为 1 然后用外部这个连接池啊,这货的主要功能就是个连接池,你不想要就不用它算了喽
    4771314
        4
    4771314  
       Jul 5, 2021
    没太看懂使用 mongodb 为什么要使用中间件?你的 Node 服务是没有接口、每次请求都需要访问 mongodb ?而且下载量和 start 都这么少的库,lz 也敢使用,是个狼人没错了
    balabalaguguji
        5
    balabalaguguji  
    OP
       Jul 5, 2021
    @4771314 #4 看了源码后没敢用了,刚接触,所以都看看
    4771314
        6
    4771314  
       Jul 5, 2021
    @balabalaguguji 要使用 mongodb 的话,直接使用官方提供的 mongoose 就可以了
    balabalaguguji
        7
    balabalaguguji  
    OP
       Jul 5, 2021
    @4771314 #6 mongoose 并不是官方提供的吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5252 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:14 · PVG 16:14 · LAX 01:14 · JFK 04:14
    ♥ Do have faith in what you're doing.