개요
MongoDB 클라이언트가 쓰기 (write) 작업을 대량으로 수행할 수 기능 제공합니다. MongoDB 8.0부터는 여러 데이터베이스 및 컬렉션에서 대량 쓰기 (write) 작업을 수행할 수 있습니다. MongoDB 8.0 이전 버전을 사용하는 경우 단일 컬렉션 에서 대량 쓰기 (write) 작업을 수행할 수 있습니다.
MongoDB 8.0의 여러 데이터베이스 및 컬렉션에 걸쳐 대량 쓰기 (write) 작업을 수행하려면 bulkWrite 데이터베이스 명령 또는 Mongo.bulkWrite() mongosh 메서드를 사용합니다.
단일 컬렉션 에서 대량 쓰기 (write) 작업을 수행하려면 db.collection.bulkWrite() mongosh 메서드를 사용합니다. MongoDB 8.0 이상을 실행 하는 경우 bulkWrite 또는 Mongo.bulkWrite() 를 사용하여 단일 컬렉션 에 쓰기 (write) 수도 있습니다.
순서가 지정된 연산과 순서가 지정되지 않은 연산
대량 쓰기 (write)작업은 순차적으로 실행되거나( 순서가지정됨), 임의의 순서로( unordered) 실행됩니다. 기본값 으로 작업은 순서가 지정되며 첫 번째 오류가 발생하면 중지됩니다. 순서가 지정되지 않은 작업은 오류에도 불구하고 계속되며 병렬로 실행될 수 있으므로 일반적으로 샤딩된 컬렉션의 경우 더 빨라집니다.
실행 동작 및 오류 처리에 대한 자세한 내용은 db.collection.bulkWrite() 또는 Mongo.bulkWrite() 를 참조하세요.
지원되는 작업
대량 쓰기 (write) 작업 지원: 1개 삽입, 1개 업데이트, 다수 업데이트, 1개 바꾸기, 1개 삭제 및 다수 삭제.
분할된 컬렉션에 대한 대량 삽입을 위한 전략Strategies for bulk inserts to a Sharded Collection
대규모 대량 삽입 작업은 샤딩된 클러스터 성능에 영향 수 있습니다. 샤딩된 컬렉션에서 대량 쓰기를 최적화하려면 다음을 수행합니다.
컬렉션 사전 분할
샤딩된 컬렉션이 비어 있고 샤드 키의 첫 번째 키에 해시된 샤딩을 사용하지 않는 경우, 컬렉션에는 단일 샤드에 위치한 하나의 초기 청크만 있습니다. 그 후 MongoDB가 데이터를 수신하고 청크를 사용 가능한 샤드에 배포하는 데에는 시간이 걸립니다. 이러한 성능 비용을 방지하려면 샤딩된 클러스터에서 범위를 생성하여 컬렉션을 미리 분할하세요.
정렬되지 않은 쓰기 대상 mongos
샤딩된 클러스터에 대한 쓰기 (write) 성능을 향상시키려면 대량 쓰기 (write) 수행할 ordered 때 을 로 설정하여 false 순서가 지정되지 않은 대량 쓰기 (write) 수행합니다. mongos 는 여러 샤드에 동시에 쓰기를 전송하려고 시도합니다.빈 컬렉션의 경우 먼저 샤드 클러스터의청크 분할에 설명된 대로 컬렉션 을 미리 분할합니다.
단조로운 스로틀링 피하기
삽입하는 동안 샤드 키가 단조롭게 증가하면 모든 삽입된 데이터는 컬렉션의 마지막 청크로 이동하며 항상 단일 샤드에 저장됩니다. 따라서 클러스터의 삽입 용량은 해당 단일 샤드의 삽입 용량을 초과하지 않습니다.
삽입 볼륨이 단일 샤드로 처리할 수 있는 것보다 크거나 단조롭게 증가하는 샤드 키를 피할 수 없는 경우 애플리케이션을 다음과 같이 수정할 수 있습니다.
샤드 키의 이진 비트를 반전시킵니다. 이는 정보를 보존하고 값 시퀀스 증가와 삽입 순서의 상관 관계를 방지합니다.
인서트의 첫 번째와 마지막 16비트 단어를 "shuffle" 으로 바꿉니다.
예시
다음 예제는 C++에서 생성된 BSON ObjectId의 선행 및 후행 16비트 단어를 교체하여 더 이상 단조롭게 증가하지 않도록 합니다.
using namespace mongo; OID make_an_id() { OID x = OID::gen(); const unsigned char *p = x.getData(); swap( (unsigned short&) p[0], (unsigned short&) p[10] ); return x; } void foo() { // create an object BSONObj o = BSON( "_id" << make_an_id() << "x" << 3 << "name" << "jane" ); // now we may insert o into a sharded collection }