Bulk()
이 페이지의 내용
팁
MongoDB는 대량 쓰기 작업을 수행하기 위한 db.collection.bulkWrite()
메서드도 제공합니다.
설명
Bulk()
단일 컬렉션에 대해 대량으로 수행할 쓰기 작업 목록을 구성하는 데 사용되는 대량 작업 빌더입니다를 만듭니다. 빌더를 인스턴스화하려면 빌더에서
db.collection.initializeOrderedBulkOp()
또는db.collection.initializeUnorderedBulkOp()
메서드를 사용합니다.
순서가 지정된 대량 작업과 순서가 지정되지 않은 대량 작업
빌더는 작업 목록을 순서가 지정되거나 되지 않은 상태로 구성할 수 있습니다.
순서가 지정된 연산
순서가 지정된 작업 목록을 사용하여 MongoDB는 목록의 쓰기 작업을 순차적으로 실행합니다. 쓰기 작업 중 하나를 처리하는 동안 오류가 발생하더라도 MongoDB는 목록에 있는 나머지 쓰기 작업을 계속 처리합니다.
db.collection.initializeOrderedBulkOp()
을 사용하여 순서가 지정된 쓰기 명령 목록에 대한 빌더를 만듭니다.
MongoDB는 ordered
연산 목록을 실행할 경우 operation type
및 연속성을 기준으로 연산을 그룹화합니다(즉, 같은 유형의 연속 연산이 함께 그룹화됨). 그 예로 순서가 지정된 목록에 삽입 연산 2개가 먼저 나오고 그 다음에 업데이트 연산, 또 그 다음에는 다른 삽입 연산이 있는 경우, MongoDB는 이 연산들을 3개의 개별 그룹으로 그룹화합니다. 첫 번째 그룹에는 삽입 연산 2개, 두 번째 그룹에는 업데이트 연산, 세 번째 그룹에는 마지막 삽입 연산이 포함됩니다. 이 동작은 이후의 버전에서 변경될 수 있습니다.
mongosh
의 Bulk()
작업과 드라이버의 유사한 메서드에는 그룹의 작업 수에 대한 제한이 없습니다. 대량 작업 실행을 위해 작업이 어떻게 그룹화되는지 확인하려면 실행 후 Bulk.getOperations()
를 호출합니다.
샤드 컬렉션에서 ordered
작업 목록을 실행하는 것은 unordered
목록을 실행하는 것보다 일반적으로 느립니다. 정렬된 목록에서는 각 작업이 이전 작업이 완료될 때까지 기다려야 하기 때문입니다.
순서가 지정되지 않은 연산
정렬되지 않은 작업 목록을 사용하면 MongoDB는 목록의 쓰기 작업을 비결정적 순서로 실행할 수 있을 뿐만 아니라 병렬로 실행할 수도 있습니다. 쓰기 작업 중 하나를 처리하는 동안 오류가 발생하더라도 MongoDB는 목록에 있는 나머지 쓰기 작업을 계속 처리합니다.
db.collection.initializeUnorderedBulkOp()
를 사용하여 정렬되지 않은 쓰기 명령 목록에 대한 빌더를 만듭니다.
MongoDB는 unordered
연산 목록을 실행할 경우 이 연산들을 그룹화합니다. 순서가 지정되지 않은 대량 연산이 있으면 성능 향상을 위해 목록에 속한 연산의 순서를 변경할 수 있습니다. 따라서 애플리케이션은 unordered
대량 연산을 수행할 때 순서에 의존해서는 안 됩니다.
mongosh
의 Bulk()
작업과 드라이버의 유사한 메서드에는 그룹의 작업 수에 대한 제한이 없습니다. 대량 작업 실행을 위해 작업이 어떻게 그룹화되는지 확인하려면 실행 후 Bulk.getOperations()
를 호출합니다.
트랜잭션
Bulk()
는 분산 트랜잭션 내에서 사용할 수 있습니다.
Bulk.insert()
연산에서는 이 컬렉션이 이미 존재해야 합니다.
Bulk.find.upsert()
연산에서 연산 결과 업서트가 발생할 경우에는 이 컬렉션이 이미 존재해야 합니다.
트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.
중요
대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.
추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.
방법
Bulk()
빌더에는 다음과 같은 메서드가 있습니다.
이름 | 설명 |
---|---|
작업 목록에 삽입 작업을 추가합니다. | |
업데이트 또는 제거 작업에 대한 쿼리 조건을 지정합니다. | |
여러 문서 삭제 작업을 작업 목록에 추가합니다. | |
작업 목록에 단일 문서 삭제 작업을 추가합니다. | |
Bulk.find.delete() 의 별칭입니다. | |
Bulk.find.deleteOne() 의 별칭입니다. | |
작업 목록에 단일 문서 바꾸기 작업을 추가합니다. | |
작업 목록에 단일 문서 업데이트 작업을 추가합니다. | |
작업 목록에 multi 업데이트 작업을 추가합니다. | |
업데이트 작업에 upsert: true 를 지정합니다. | |
작업 목록을 일괄적으로 실행합니다. | |
Bulk() 작업 객체에서 실행된 쓰기 작업의 배열을 반환합니다. | |
Bulk() 작업 객체의 작업 수 및 배치가 포함된 JSON document를 반환합니다. | |
Bulk.toJSON() 결과를 문자열로 반환합니다. |