본문 바로가기
DB/firebase

[firebase]: firestore 데이터 병렬 처리(batch)

by 갈잃자 2024. 4. 18.

개요: 보험 데이터를 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

댓글