cursor.allowDiskUse()
Nesta página
Definição
cursor.allowDiskUse()
Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação de um driver de idioma específico, como Node.js.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Use
allowDiskUse()
para permitir ou proibir a gravação de arquivos temporários no disco quando um estágio do pipeline exceder o limite de 100 megabytes. A partir do MongoDB 6.0, as operações que exigem mais de 100 megabytes de memória gravam dados automaticamente em arquivos temporários por padrão.allowDiskUse()
tem o seguinte formato:db.collection.find(<match>).sort(<sort>).allowDiskUse()
Consulte Uso de classificação e indexação para obter mais informações sobre operações block sort.
Comportamento
Interação com allowDiskUseByDefault
A partir do MongoDB 6.0, os estágios do pipeline que exigem mais de 100 megabytes de memória para execução gravam arquivos temporários no disco por padrão.
Observação
Antes do MongoDB 6.0, .allowDiskUse(false)
e .allowDiskUse(true)
têm o mesmo efeito. No MongoDB 6.0, tanto o mongosh
quanto o shell mongo
legado se comportam da seguinte maneira:
Se allowDiskUseByDefault
for true
(este é o padrão):
.allowDiskUse()
não tem efeito adicional.allowDiskUse(true)
não tem efeito adicional.allowDiskUse(false)
proíbe a query de gravar arquivos temporários no disco
Se allowDiskUseByDefault
for false
:
.allowDiskUse()
permite gravar arquivos temporários no disco.allowDiskUse(true)
permite gravar arquivos temporários no disco.allowDiskUse(false)
não tem efeito adicional
Suporta somente classificações grandes não indexadas
cursor.allowDiskUse()
não tem efeito sobre operações de classificação respondidas usando um índice ou operações de classificação não indexadas ("bloqueio") que exigem menos de 100 megabytes de memória. Para obter uma documentação mais completa sobre block sorts e o uso de índices de classificação, consulte Uso de classificação e índice.
Para verificar se o MongoDB deve executar uma ordenação bloqueante, acrescente cursor.explain()
à query e verifique os resultados explicativos. Se o plano de query contiver um estágio SORT
, o MongoDB deverá executar uma operação de classificação de bloqueio sujeita ao limite de memória de 100 megabyte.
Exemplo
Considere uma coleção sensors
com apenas o índice padrão em _id
. A coleção contém documentos semelhantes aos seguintes:
{ "sensor-name" : "TEMP-21425", "sensor-location" : "Unit 12", "reading" : { "timestamp" : Timestamp(1580247215, 1), "value" : 212, "unit" : "Fahrenheit" } }
A seguinte operação inclui um cursor.sort()
no campo reading.timestamp
. A operação também inclui o cursor.allowDiskUse()
para suportar a operação de classificação.
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse()
Como o reading.timestamp
não está incluído em um índice, o MongoDB deve executar uma operação de classificação de bloqueio para retornar os resultados na ordem de classificação solicitada. Ao especificar allowDiskUse()
, o MongoDB pode processar a operação de classificação mesmo que ela exija mais de 100 megabytes de memória do sistema. Se allowDiskUse()
fosse omitido e a operação exigisse mais de 100 megabytes de memória do sistema, o MongoDB retornaria um erro.