在NestJS + TypeORM中,数据库连接是否总是处于打开状态?

7
在我的第一个项目中,我们使用了express和mysql库,没有使用任何ORM,并且在控制器启动时打开连接,在finally块中关闭此连接。我一直认为这种方法是正确的。
但现在我开始使用NestJS + TypeORM创建应用程序,当服务器启动时 - 连接已准备好打开!我想知道是否可以,开始搜索,但更加困惑。
例如,人们说:
“您只有在需要时才需要打开连接,并在使用后立即关闭它,因为您不应该保持1个打开的连接,其他用户可能需要它。”
他们还说:
“您必须使用连接池。连接池是打开1个或多个连接并保持它们打开。当应用程序中的某个线程需要它时,它将不会浪费时间进行打开。”
这两个句子彼此排斥。
所以,
问题1:谁是对的?
问题2:
如果TypeORM使用“连接池”,那么如果我的控制器始终使用“默认连接”,它有什么优点?
    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private usersRepository: Repository<User>,
      ) {}
    
      findAll(): Promise<User[]> {
        return this.usersRepository.find();
      }
    }

如果有100万用户同时请求此控制器,TypeORM不会在用户池中创建额外的连接,以防止一个连接过载。那么,TypeORM连接池有什么意义呢?
1个回答

0

问题1:这取决于逻辑和应用程序的上下文,对我来说,两者都不对也不错。

问题2:连接池将根据需要打开数据库连接以最大化性能。如果您的应用程序具有并发用户,则使用多个与数据库的连接是有意义的。您应该委托打开和关闭数据库连接的任务给连接池管理器。您可以限制与数据库的连接数(https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md#common-connection-options)。

此致


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接