sql >> Database teknologi >  >> NoSQL >> MongoDB

Pymongo / MongoDB:oprette indeks eller sikre indeks?

@andreas-jung har ret i det ensure_index() er en indpakning over create_index() , jeg tror, ​​at forvirringen opstår med sætningen:

Når et indeks er oprettet (eller sikret) af PyMongo, "huskes det" i ttlsesekunder.

Det er ikke, at indekset er midlertidigt eller "forbigående", hvad der sker er, at der i løbet af det angivne antal sekunder, et kald til ensure_index() at prøve at oprette det samme indeks igen vil ikke har nogen virkning og vil ikke kald create_index() nedenunder, men efter at "cachen" udløber, et kald til ensure_index() vil kald igen create_index() nedenunder.

Jeg forstår udmærket din forvirring, for ærligt talt gør PyMongos dokumenter ikke et særlig godt stykke arbejde med at forklare, hvordan dette fungerer, men hvis du går over til Ruby-dokumenterne, er forklaringen lidt klarere:

  • (String) sure_index(spec, opts ={})

Kalder create_index og sætter et flag for ikke at gøre det igen i yderligere X minutter. denne gang kan angives som en valgmulighed ved initialisering af et Mongo::DB-objekt som optioner[:cache_time] Enhver ændring af et indeks vil blive propageret igennem uanset cache-tid (f.eks. ændring af indeksretning)

Parametrene og mulighederne for denne metode er de samme som dem for Collection#create_index.

Eksempler:

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

Jeg påstår ikke, at drivere fungerer nøjagtigt det samme, det er bare, at deres forklaring til illustrationsformål er lidt bedre IMHO.



  1. kommandolinjegodkendelse af mongo mislykkes

  2. Hvordan kan jeg indlæse data fra mongodb-samling til pandas' DataFrame?

  3. Hvordan kan jeg ændre størrelsen på en samling med mongodb-loft uden at miste data?

  4. Hvordan gemmer man i Redis sorteret sæt med server-side tidsstempel som score?