是否始终在NestJS + TypeORM中打开数据库连接?

时间:2020-07-16 21:35:54

标签: database database-connection nestjs typeorm

在我的第一个项目中,我们使用expressmysql库,没有任何ORM,并且在控制器启动时打开了连接,并在finaly块中关闭了该连接。我一直认为这种方法是正确的。

但是现在我开始使用NestJS + TypeORM做一个应用程序,并且当我的服务器启动时-连接已准备好打开!我想知道是否还可以,开始使用Google,但更加困惑了。

例如人们说

“仅在需要时才打开连接,然后将其关闭 使用后立即使用,因为您不应该打开1 连接,其他用户可能需要它。”

他们也说:

“您必须使用连接池。连接池正在打开1+ 连接并保持开放。当您的应用中需要一些线程时 它,它不会在打开时浪费时间。”

什么?这两个句子彼此排斥。

所以

问题1:谁是对的?

问题2:

如果TypeORM使用“连接池”,那么如果我的控制器将始终使用“默认连接”,那么它的优点是什么?

    @Injectable()
    export class UsersService {
      constructor(
        @InjectRepository(User)
        private usersRepository: Repository<User>,
      ) {}
    
      findAll(): Promise<User[]> {
        return this.usersRepository.find();
      }
    }

如果1kk用户同时请求此控制器-TypeORM不会在用户池中创建其他连接以防止一个连接过载。那么,TypeORM连接池有什么意义呢?

1 个答案:

答案 0 :(得分:0)

问题 1:这取决于应用程序的逻辑和上下文,对我来说既没有错也没有对。

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

问候