[MongoDB] Bulk Write, Retryable Write/Read

2020. 12. 16. 01:56Database/MongoDB

1. Bulk Write

1) Bulk Write

MongoDB는 단일 컬렉션에 대해 대량 쓰기, 업데이트 제거 작업을 Bulk Write를 통해 할 수 있다. Bulk Write는 Ordered, Unordered 방식이 있다.

 

Ordered 방식(기본 MongoDB 방식)은 작업을 순차적으로 시행하는데(이전 작업을 완료할때 까지 다음 작업을 처리하지 않기 때문에 속도가 느림), 작업 도중 오류가 발생하면 나머지 쓰기 작업을 처리하지 않고 작업을 끝낸다. Unordered 방식은 쓰기 작업 중 하나가 오류가 발생하더라도 나머지 작업을 계속 실행한다.

2) bulkWrite() 지원 목록

  • insertOne
  • updateOne
  • updateMany
  • replaceOne
  • deleteOne
  • deleteMany

3) 사용 방법

Character 컬렉션이 있다고 가정한다.

{ "_id" : 1, "char" : "Brisbane", "class" : "monk", "lvl" : 4 },
{ "_id" : 2, "char" : "Eldon", "class" : "alchemist", "lvl" : 3 },
{ "_id" : 3, "char" : "Meldane", "class" : "ranger", "lvl" : 3 }

이 때, bulkWrite() 메서드는 컬렉션의 다중 연산을 수행한다. 순차적으로 진행하면서 오류 발생 시 나머지 작업 처리를 하지 않는다.

try {
   db.characters.bulkWrite(
      [
         { insertOne :
            {
               "document" :
               {
                  "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
               }
            }
         },
         { insertOne :
            {
               "document" :
               {
                  "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3
               }
            }
         },
         { updateOne :
            {
               "filter" : { "char" : "Eldon" },
               "update" : { $set : { "status" : "Critical Injury" } }
            }
         },
         { deleteOne :
            { "filter" : { "char" : "Brisbane" } }
         },
         { replaceOne :
            {
               "filter" : { "char" : "Meldane" },
               "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
            }
         }
      ]
   );
}
catch (e) {
   print(e);
}

위의 결과의 반환 값은 다음과 같다.

{
   "acknowledged" : true,
   "deletedCount" : 1,
   "insertedCount" : 2,
   "matchedCount" : 2,
   "upsertedCount" : 0,
   "insertedIds" : {
      "0" : 4,
      "1" : 5
   },
   "upsertedIds" : {

   }
}

 

 

 

2. Retryable Write/Read

1) Retryable Write

Retryable Write는 MongoDB에서 오류가 발생했을 때, 특정 쓰기 작업을 자동으로 재시도 할 수 있는 기능이다. 즉, 작업 중 오류 발생 시 그 작업을 재시도하는 기능이다.

 

Retryable Write에는 몇가지 조건이 필요하다.

  • 복제본 집합(Slave의 집합) 혹은 공유 클러스터가 필요하다. (독립 실행형 인스턴스를 지원하지 않는다.)
  • WiredTiger(기본 MongoDB 스토리지 엔진) 혹은 인메모리 스토리지 엔진이 필요하다. (document-level locking을 지원해야한다.)
  • 3.6 이상의 MongoDB 드라이버가 필요하다.

 

Retryable Write Operations

2) Retryable Read

Retryable Read는 MongoDB에서 오류가 발생했을 때, 자동으로 읽기 작업을 재시도하는 기능이다.

 

Retryable Read에는 몇가지 조건이 필요하다.

  • 최소한의 MongoDB 드라이버 버전이 필요하다. (MongoDB 서버 4.2 이상과 호환이 가능해야한다.)
  • 최소한의 MongoDB 서버 버전이 필요하다. (3.6 이상)

 

Retryable Read Operations


[참고] docs.mongodb.com/manual/crud/

728x90

'Database > MongoDB' 카테고리의 다른 글

[MongoDB] Data Model (Documents간의 관계 설정 구조)  (0) 2020.12.17
[MongoDB] Text Search  (0) 2020.12.17
[MongoDB] CRUD  (0) 2020.12.15
[MongoDB] MongoDB 설치  (0) 2020.12.12