개요: 보험 데이터를 update 하는데 많은 시간이 걸려, 이를 빠른시간으로 처리하기 위해 찾아봄
batch: 데이터 삽입, 삭제, 업데이트, 조회 등 병렬로 처리하여 처리속도와 리소스를 줄일 수 있는 방법
동작원리: batch란 자료(메모리)를 생성하고, 그안에 처리할 함수 혹은 동작들을 넣은 뒤, 특정 시간 또는 특정 조건일 때 병렬로 처리시킴
예시
// 예시
// users 컬렉션에 있는 데이터 중, lastName이 '김'인 유저들을 '박'씨로 변경
// 100개씩 batch를 채워 병렬로 처리함
async function changeLastNameUsers() {
const snapRef = await db.collection('users');
const snapshot = await snapRef.get(); // users 정보를 모두 가져옴 (김씨만 가져오면 되지만 예시니깐 다 가져옴)
let batch = db.batch(); // batch 생성
let count = 0;
for (const doc of snapshot.docs) {
const data = doc.data();
const userId = doc.id;
if (data.lastName === '김') {
const updatedData = {
...data,
lastName: '박'
};
let docRef = await snapRef.doc(userId);
batch.update(docRef, updatedData); // 해당 docs에 updatedData로 update시킴;
count++;
}
if (count % 100 === 0) { // 100개가 넘어가면, batch내용을 처리하고, 새로운 batch 생성
await batch.commit();
batch = db.batch();
}
}
await batch.commit(); //100개로 다 떨어지지 않는다면 나머지 김씨들도 박씨로 변경
}
changeLastNameUsers();
batch를 썼을 때 이점:
1. 네트워크 비용 절감: 여러 요청을 그룹화하여 네트워크 비용을 절감할 수 있음
2. 원자성보장: 한번의 커밋으로 모든 작업을 성공하거나 실패하기 때문에, 부분적인 데이터의 변화를 방지할 수 있다.
3. 성능향상: 한번의 요청으로 여러 작업을 동시에 처리하기에 처리 속도가 향상된다.
'DB > firebase' 카테고리의 다른 글
[Node.js] firebase 연동 후 db(firestore) 조회 (0) | 2024.02.20 |
---|
댓글