MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pymongo / MongoDB:criar índice ou garantir índice?


@andreas-jung está certo nesse ensure_index() é um wrapper sobre create_index() , acho que a confusão surge com a frase:

Quando um índice é criado (ou garantido) pelo PyMongo, ele é “lembrado” por ttlseconds.

Não é que o índice seja temporário ou "transitório", o que acontece é que durante a quantidade de segundos especificada, uma chamada para ensure_index() tentar criar o mesmo índice novamente não terá qualquer efeito e não chamar create_index() embaixo, mas depois que o "cache" expirar, uma chamada para ensure_index() vai chame novamente create_index() por baixo.

Eu entendo perfeitamente sua confusão porque, francamente, os documentos do PyMongo não fazem um bom trabalho explicando como isso funciona, mas se você for para os documentos do Ruby, a explicação é um pouco mais clara:
  • (String) garanta_index(spec, opts ={})

Chama create_index e define um sinalizador para não fazê-lo novamente por mais X minutos. esse tempo pode ser especificado como uma opção ao inicializar um Mongo::DBobject como options[:cache_time] Quaisquer alterações em um índice serão propagadas independentemente do tempo de cache (por exemplo, um mudança de direção do índice)

Os parâmetros e opções para estemétodos são os mesmos paraCollection#create_index.

Exemplos:

Call sequence:

Time t: @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and sets the 5 minute cache

Time t+2min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- doesn't do anything

Time t+3min : @posts.ensure_index([['something_else', Mongo::ASCENDING]) -- calls create_index and sets 5 minute cache

Time t+10min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and resets the 5 minute counter

Não estou afirmando que os drivers funcionam exatamente da mesma forma, é apenas que, para fins de ilustração, sua explicação é um pouco melhor IMHO.