Bulk()
팁
MongoDB는 대량 쓰기 작업을 수행하기 위한 db.collection.bulkWrite()
메서드도 제공합니다.
설명
Bulk()
단일 컬렉션에 대해 대량으로 수행할 쓰기 작업 목록을 구성하는 데 사용되는 대량 작업 빌더입니다를 만듭니다. 빌더를 인스턴스화하려면 빌더에서
db.collection.initializeOrderedBulkOp()
또는db.collection.initializeUnorderedBulkOp()
메서드를 사용합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원에 관해 자세히 알아보려면 지원되지 않는 명령을 참조하십시오.
순서가 지정된 대량 작업과 순서가 지정되지 않은 대량 작업
빌더는 작업 목록을 순서가 지정되거나 되지 않은 상태로 구성할 수 있습니다.
순서가 지정된 연산
순서가 지정된 작업 목록을 사용하여 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()
빌더에는 다음과 같은 메서드가 있습니다.
이름 | 설명 |
---|---|
작업 목록에 삽입 작업을 추가합니다. | |
업데이트 또는 제거 작업에 대한 쿼리 조건을 지정합니다. | |
여러 문서 삭제 작업을 작업 목록에 추가합니다. | |
작업 목록에 단일 문서 삭제 작업을 추가합니다. | |
| |
| |
작업 목록에 단일 문서 바꾸기 작업을 추가합니다. | |
작업 목록에 단일 문서 업데이트 작업을 추가합니다. | |
작업 목록에 | |
업데이트 작업에 | |
작업 목록을 일괄적으로 실행합니다. | |
| |
| |
|