数据库连接总是在 NestJS + TypeORM 中打开吗?

Far*_*rad 5 database database-connection typeorm nestjs

在我的第一个项目,我们使用expressmysql图书馆没有任何ORM,我们打开连接时,控制器启动和关闭在这方面finaly块。我一直认为这个方法是对的。

但是现在我开始用 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();
      }
    }
Run Code Online (Sandbox Code Playgroud)

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

小智 0

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

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

问候