Docs Menu
Docs Home
/ / /
Java 동기화
/

대량 작업 수행

bulkWrite() 메서드는 단일 컬렉션에 대해 일괄 쓰기 작업을 수행합니다. 이 메서드를 사용하면 애플리케이션에서 MongoDB 인스턴스로의 네트워크 왕복 횟수가 줄어들어 애플리케이션 성능이 향상됩니다. 모든 작업이 반환된 후에만 성공 상태를 수신하므로 사용 사례의 요구 사항을 충족하는 경우 이를 사용하는 것이 좋습니다.

bulkWrite()에서 다음 쓰기 작업 중 하나 이상을 지정할 수 있습니다.

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

bulkWrite() 메서드는 다음 매개 변수를 허용합니다:

  • WriteModel을(를) 구현하는 List 객체: WriteModel을(를) 구현하는 클래스는 앞서 언급한 쓰기 작업에 해당합니다. 예를 들어 InsertOneModel 클래스는 insertOne 쓰기 작업을 래핑합니다. 각 클래스에 대한 자세한 내용은 이 페이지 하단의 API 문서 링크를 참조하세요.

  • BulkWriteOptions: MongoDB 인스턴스가 쓰기 작업 순서를 지정하는지 여부와 같은 설정을 지정하는 선택적 객체입니다.

참고

재시도 가능 쓰기는 UpdateManyModel 또는 DeleteManyModel 인스턴스를 하나 이상 포함하지 않는 한 MongoDB Server 버전 3.6 이상에서 일괄 쓰기 작업에 실행됩니다.

기본적으로 MongoDB는 지정된 순서에 따라 일괄 쓰기 작업을 하나씩 실행합니다(예 연속적으로). 순서가 지정된 일괄 쓰기 중에 작업 처리 도중 오류가 발생하면 MongoDB는 목록의 나머지 작업을 처리하지 않고 반환합니다. 반면, orderedfalse로 설정하면 MongoDB는 오류 발생 시 목록에 남아 있는 쓰기 작업을 계속 처리합니다. 순서가 정해지지 않은 작업은 MongoDB가 병렬적으로 실행할 수 있기 때문에 이론적으로는 더 빠르지만, 쓰기가 순서에 의존하지 않는 경우에만 사용해야 합니다.

bulkWrite() 메서드는 삽입, 수정, 삭제된 문서 수 등 쓰기 작업 결과에 대한 정보가 포함된 BulkWriteResult 객체를 반환합니다.

하나 이상의 작업에서 collection의 고유 인덱스를 위반하는 값을 설정하려고 하면 다음과 같은 예외가 발생합니다.

The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].

마찬가지로 스키마 검증을 사용하는 컬렉션에 대해 일괄 쓰기를 시도할 때 하나 이상의 쓰기 작업이 예상치 못한 형식을 제공하는 경우 예외가 발생할 수 있습니다.

다음 코드 샘플은 sample_mflix 데이터베이스의 movies 컬렉션에 대해 순서가 정해진 일괄 쓰기 작업을 수행합니다. bulkWrite()에 대한 호출 예시에는 InsertOneModel, UpdateOneModelDeleteOneModel의 예시가 포함되어 있습니다.

참고

이 예시 에서는 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스 에 연결하는 방법에 학습 보려면 연결 가이드 를 참조하세요.

package usage.examples;
import java.util.Arrays;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.bulk.BulkWriteResult;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.UpdateOptions;
public class BulkWrite {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
try {
BulkWriteResult result = collection.bulkWrite(
Arrays.asList(
new InsertOneModel<>(new Document("name", "A Sample Movie")),
new InsertOneModel<>(new Document("name", "Another Sample Movie")),
new InsertOneModel<>(new Document("name", "Yet Another Sample Movie")),
new UpdateOneModel<>(new Document("name", "A Sample Movie"),
new Document("$set", new Document("name", "An Old Sample Movie")),
new UpdateOptions().upsert(true)),
new DeleteOneModel<>(new Document("name", "Yet Another Sample Movie")),
new ReplaceOneModel<>(new Document("name", "Yet Another Sample Movie"),
new Document("name", "The Other Sample Movie").append("runtime", "42"))
));
System.out.println("Result statistics:" +
"\ninserted: " + result.getInsertedCount() +
"\nupdated: " + result.getModifiedCount() +
"\ndeleted: " + result.getDeletedCount());
} catch (MongoException me) {
System.err.println("The bulk write operation failed due to an error: " + me);
}
}
}
}

출력은 다음과 같습니다.

Result statistics:
inserted: 3
updated: 2
deleted: 1

Legacy API

레거시 API를 사용하는 경우 FAQ 페이지를 참조하여 코드 예시의 어떤 부분을 변경해야는지 확인하세요.

이 페이지에 언급된 클래스 및 메서드에 대한 추가 정보는 다음 리소스를 참조하세요.

돌아가기

여러 문서 삭제