실험 환경
TypeORM, MySQL, Nest.js, TypeScript 이용
코드
// Insert
async bulkInsert(users: User[]) {
const newUser = users.map((user: User) => new User({ name: user.name }));
const startTime = Date.now();
const insertResult = await this.userRepository.insert(newUser);
const result = insertResult.identifiers.map((user: User) => {
return { id: user.id };
});
const duration = Date.now() - startTime;
this.logger.log(
`Bulk "insert" of ${users.length} users completed in ${duration}ms`,
);
return { duration, result: result.length };
}
// Save
async bulkSave(users: User[]) {
const newUser = users.map((user: User) => new User({ name: user.name }));
const startTime = Date.now();
const result = await this.userRepository.save(newUser);
const duration = Date.now() - startTime;
this.logger.log(
`Bulk "save" of ${users.length} users completed in ${duration}ms`,
);
return { duration, result: result.length };
}
Postman 을 이용하여 실험
4 명의 유저
100 명을 저장해본 결과
300 명을 저장해본 결과
insert | save | |
4 명 | 3 ms (평균) | 8 ms (평균) |
100명 | 12 ms | 43 ms |
300명 | 28 ms | 91 ms |
결론
ms 단위의 차이라 미세하지만 데이터가 늘어나면 늘어날수록 insert가 더 빠르게 처리하는 것을 알 수 있다.
'프로그래밍 > Nest.js' 카테고리의 다른 글
[ Nest.js ] 대량의 데이터 삭제시 두가지 softDelete 방식 비교 (0) | 2024.07.23 |
---|---|
[ Nest.js ] update vs createQueryBuilder vs query : 다량의 데이터 업데이트 속도 비교 (0) | 2024.07.22 |
[ Nest.js ] Middleware, Guard, Interceptor, Pipe, Filter (0) | 2024.07.20 |
[ Nest.js ] Lock 을 이용한 데이터 중복 저장 방지 구현 (0) | 2024.07.18 |
[ Nest.js ] cross-validator 의 데코레이터가 적용이 안되는 경우 (0) | 2024.07.14 |