Bulk.insert()
팁
MongoDB는 대량 쓰기 작업을 수행하기 위한 db.collection.bulkWrite()
메서드도 제공합니다.
설명
Bulk.insert(<document>)
대량 작업 목록에 삽입 작업을 추가합니다.
Bulk.insert()
는 다음 매개 변수를 허용합니다.Parameter유형설명doc
문서삽입할 문서. 문서 크기는 최대 BSON 문서 크기보다 작거나 같아야 합니다.
행동
부정확한 삽입
삽입 중에 서버 오류가 발생하더라도 일부 문서가 삽입되었을 수 있습니다.
삽입에 성공하면 시스템에서 컬렉션에 삽입된 문서 수 BulkWriteResult.insertedCount
를 반환합니다. 복제본 세트 상태 변경으로 인해 삽입 작업이 중단되면 시스템에서 문서 삽입을 계속할 수 있습니다. 따라서 BulkWriteResult.insertedCount
는 실제 삽입된 문서보다 적은 수의 문서를 보고할 수 있습니다.
무작위 데이터에 대한 성능 고려 사항
작업에서 인덱싱된 필드에 대량의 임의 데이터(예시: 해시 인덱스)를 삽입하는 경우 삽입 성능이 저하될 수 있습니다. 무작위 데이터를 대량으로 삽입하면 무작위 인덱스 항목이 생성되어 인덱스 크기가 늘어납니다. 인덱스가 다른 인덱스 항목에 액세스하기 위해 각 무작위 삽입이 필요한 크기에 도달하면 삽입으로 인해 WiredTiger 캐시 제거 및 교체 비율이 높아집니다. 이 경우 인덱스가 더 이상 캐시에 완전히 저장되지 않고 디스크에서 업데이트되어 성능이 저하됩니다.
인덱싱된 필드에 무작위 데이터를 대량 삽입하는 성능을 개선하려면 다음 두 가지 방법을 사용할 수 있습니다.
인덱스를 제거한 다음 임의의 데이터를 삽입한 후 다시 생성합니다.
데이터를 인덱싱되지 않은 빈 collection에 삽입합니다.
대량 삽입 후 인덱스를 생성하면 메모리의 데이터가 정렬되고 모든 인덱스에 대해 정렬된 삽입이 수행됩니다.
예시
다음에서는 items
컬렉션의 Bulk()
작업 빌더를 초기화하고 여러 문서를 추가하기 위한 일련의 삽입 작업을 추가합니다.
var bulk = db.items.initializeUnorderedBulkOp(); bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } ); bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } ); bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } ); bulk.execute();