在我的第一个项目中,我们使用了express和mysql库,没有使用任何ORM,并且在控制器启动时打开连接,在finally块中关闭此连接。我一直认为这种方法是正确的。
但现在我开始使用NestJS + TypeORM创建应用程序,当服务器启动时 - 连接已准备好打开!我想知道是否可以,开始搜索,但更加困惑。
例如,人们说:
“您只有在需要时才需要打开连接,并在使用后立即关闭它,因为您不应该保持1个打开的连接,其他用户可能需要它。”
他们还说:
“您必须使用连接池。连接池是打开1个或多个连接并保持它们打开。当应用程序中的某个线程需要它时,它将不会浪费时间进行打开。”
这两个句子彼此排斥。
所以,
问题1:谁是对的?
问题2:
如果TypeORM使用“连接池”,那么如果我的控制器始终使用“默认连接”,它有什么优点?
如果有100万用户同时请求此控制器,TypeORM不会在用户池中创建额外的连接,以防止一个连接过载。那么,TypeORM连接池有什么意义呢?
但现在我开始使用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连接池有什么意义呢?