Closed Judy-Choi closed 1 year ago
[Feedback 내용] bulk insert는 for문을 대체하는 용도라고 생각하시면 됩니다. 복잡한 로직없이 for문으로 insert를 매번 한다는 것은 반대로 한 번에 집어넣는 bulk insert가 가능합니다.
for (obj of postList) {
await appDataSource.query(
`INSERT INTO
community_posts(user_id)
VALUES ${obj.userId} <- 이 부분
`
);
작성하신 코드에서 VALUES 뒤의 형태를 for문으로 조합해서 한번에 넣으면 될 것 같네요. 지금 상황의 로직과는 전혀 연관이 없어보입니다!
멘토님 bulk insert 를 우선 가장 간단한 hash INSERT 에 적용해보려고 합니다.
const bulk_arr = [];
console.log(postObj.hashtag);
for (hash of postObj.hashtag) {
const tmp = [user_id, post_id, post_detail_id, hash];
bulk_arr.push(tmp);
}
bulk 데이터셋은 이렇게 생겼고요.
await appDataSource.query(
`INSERT INTO community_hashtags
(user_id, post_id, post_detail_id, hashtag)
VALUES IN (?)
`,
[bulk_arr]
이 부분만 도움 부탁드려도 될까요?
멘토님 bulk insert 를 우선 가장 간단한 hash INSERT 에 적용해보려고 합니다.
- 쿼리를 감싸고 있던 for 문을 앞으로 빼서 bulk 데이터셋을 만들었어요.
const bulk_arr = []; console.log(postObj.hashtag); for (hash of postObj.hashtag) { const tmp = [user_id, post_id, post_detail_id, hash]; bulk_arr.push(tmp); }
bulk 데이터셋은 이렇게 생겼고요.
- bulk 배열을 쿼리문에 인자로 전달하여 한번에 INSERT 하려 했는데 syntax 에러가 납니다 😂 VALUES IN 이 잘못된 것인지, [[ ], [ ], ...] 형태의 bulk 데이터셋이 잘못된 것인지 모르겠습니다 ㅠㅠ
await appDataSource.query( `INSERT INTO community_hashtags (user_id, post_id, post_detail_id, hashtag) VALUES IN (?) `, [bulk_arr]
이 부분만 도움 부탁드려도 될까요?
이 부분 한번 확인해주세요! 데이터 형태가 다르게 보이네요.
단순 for 문만 적용되어 있었던 community_images 테이블 그리고 community_hashtags 테이블에 bulk insert 적용했습니다!
const image_bulk_arr = [];
for (infoObj of infoList) {
const tmp = [
postId,
postDetailId,
infoObj.productId,
infoObj.x,
infoObj.y,
];
image_bulk_arr.push(tmp);
}
const imageSql =
"INSERT INTO community_image (post_id, post_detail_id, product_id, point_x, point_y ) VALUES ?";
await appDataSource.query(imageSql, [image_bulk_arr]);
const hash_bulk_arr = [];
for (hash of postObj.hashtag) {
const tmp = [userId, postId, postDetailId, hash];
hash_bulk_arr.push(tmp);
}
const hashSql =
"INSERT INTO community_hashtags (user_id, post_id, post_detail_id, hashtag) VALUES ?";
await appDataSource.query(hashSql, [hash_bulk_arr]);
}
다만 bulk insert 구현 과정에서 기존에 쓰지 않던 임시 저장 변수들을 사용하였는데 이렇게 하면 insert 속도는 빨라졌을지 몰라도 메모리를 낭비하는 셈입니다.
const image_bulk_arr = [];
const tmp
const hash_bulk_arr
const tmp
const 를 var 내지 let 으로 바꾸고 변수를 재사용하는 방법이 있겠지만 초기화를 제대로 안 해주면 쓰레기값이 들어가는 버그가 날 가능성이 있고 초기화 처리를 꼼꼼히 해주자니 다른 할 일이 많아서 일단 이렇게 짰습니다 😂
:: 최근 작업 주제 (하나 이상의 주제를 선택해주세요.)
:: 구현 목표 - 해당 브랜치(PR)에서 구현하고자 하는 하나의 목표 작성
:: 구현 사항 설명 - 해당 브랜치(PR)에서 작업한 내용 작성
:: 테스트 결과 이미지
:: 기타 질문 및 특이 사항