cursor.allowDiskUse()
정의
cursor.allowDiskUse()
중요
Mongo쉬 방법
이 페이지에서는
mongosh
메서드를 설명합니다. 이는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.
allowDiskUse()
를 사용하여 파이프라인 단계가 100MB 제한을 초과한 경우 디스크에 임시 파일 쓰기를 허용하거나 금지할 수 있습니다. MongoDB 6.0부터 100MB를 넘는 메모리가 필요한 작업은 데이터를 임시 파일에 자동으로 쓰도록 기본 설정됩니다.allowDiskUse()
의 형식은 다음과 같습니다.db.collection.find(<match>).sort(<sort>).allowDiskUse()
차단 정렬 작업에 대한 자세한 내용은 정렬 및 인덱스 사용을 참조하세요.
행동
다음과의 상호 작용 allowDiskUseByDefault
MongoDB 6.0부터는 실행에 100메가바이트 이상의 메모리가 필요한 파이프라인 단계는 기본적으로 임시 파일을 디스크에 기록합니다.
참고
MongoDB 6.0 이전에는 .allowDiskUse(false)
와 .allowDiskUse(true)
가 동일한 효과를 가졌습니다. MongoDB 6.0에서는 mongosh
와 레거시 mongo
셸이 모두 다음과 같은 방식으로 작동합니다.
allowDiskUseByDefault
가 true
인 경우(기본값):
.allowDiskUse()
추가 효과가 없습니다..allowDiskUse(true)
추가 효과가 없습니다..allowDiskUse(false)
쿼리가 임시 파일을 디스크에 쓰는 것을 금지합니다.
allowDiskUseByDefault
가 false
인 경우:
.allowDiskUse()
디스크에 임시 파일을 쓸 수 있습니다..allowDiskUse(true)
디스크에 임시 파일을 쓸 수 있습니다..allowDiskUse(false)
추가 효과가 없습니다.
인덱싱되지 않은 대형 정렬만 지원
cursor.allowDiskUse()
는 인덱스를 사용한 정렬 작업 또는 100 메가바이트 미만의 메모리를 요구하는 비인덱스('차단') 정렬 작업에 영향을 미치지 않습니다. 차단 정렬과 정렬 인덱스 사용에 대한 보다 완전한 문서는 정렬 및 인덱스 사용을 참조하세요.
MongoDB가 차단 정렬을 수행해야 하는지 확인하려면 쿼리에 cursor.explain()
을 추가하고 설명 결과를 확인합니다. 쿼리 계획에 SORT
단계가 포함된 경우 MongoDB는 100메가바이트 메모리 제한에 따라 차단 정렬 작업을 수행해야 합니다.
예시
_id
에 기본 인덱스만 있는 컬렉션 sensors
를 가정해 보겠습니다. 이 컬렉션에는 다음과 유사한 문서가 포함되어 있습니다.
{ "sensor-name" : "TEMP-21425", "sensor-location" : "Unit 12", "reading" : { "timestamp" : Timestamp(1580247215, 1), "value" : 212, "unit" : "Fahrenheit" } }
다음 작업에는 reading.timestamp
필드에 cursor.sort()
가 포함됩니다. 이 작업에는 정렬 작업을 지원하기 위해 cursor.allowDiskUse()
도 포함됩니다.
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse()
reading.timestamp
는 인덱스에 포함되지 않으므로 MongoDB는 블로킹 정렬 작업을 수행해 요청된 정렬 순서대로 결과를 반환해야 합니다. allowDiskUse()
를 지정하면 MongoDB는 100MB 이상의 시스템 메모리가 필요한 경우에도 정렬 작업을 처리할 수 있습니다. allowDiskUse()
가 생략되고 작업에 100MB 이상의 시스템 메모리가 필요한 경우 MongoDB는 오류를 반환합니다.