2011-10-16 13 views
5

Sto utilizzando MongoDB per la nostra applicazione web. Supponiamo che ci sarà un "find()" su MongoDB per le richieste in arrivo. Qual è il modo/luogo consigliato per aggiungere un indice su una collezione MongoDB?Modo/luogo consigliato per creare un indice sulla raccolta MongoDB per un'applicazione Web

paio di opzioni che posso pensare: -

1) 'ensureIndex' sulla raccolta durante l'inizializzazione dell'applicazione. [Ma come potrò 'garantireindex' alla prima inizializzazione dell'applicazione per la prima volta? dato che non ci saranno dati in essere]

2 'ensureIndex' prima di ogni operazione di 'find' (su richiesta web)? ma non è un sovraccarico anche se 'ensureIndex' non creerebbe l'indice se è già stato creato?

Altre opzioni?

Grazie in anticipo.

risposta

4

Lo inserisco quando si inizializza l'applicazione. Se la raccolta non esiste quando si chiama ensureIndex, l'indice (e la raccolta) verranno creati in quel momento.

Suppongo che tu sappia a priori quali tipi di query verranno eseguite sui dati e che tipo di dati inserirai nell'indice, ovviamente.

+3

+1 Vale anche la pena ricordare che 'db.coll.ensureIndex ({foo: 1})' può creare un indice sul campo 'pippo' anche se la raccolta è vuota. – Nikhil

0

Eseguire in modo chiaro il valore di sureIndex all'avvio dell'applicazione. Non importa se chiami il sureIndex su una raccolta vuota (dato che in seguito aggiungerà i dati all'indice).

Inoltre, dipende da quali proprietà sono basate le query. Se ad esempio la query si basa sull'utente che ha effettuato l'accesso, è necessario aggiungere l'indice all'ID utente.

0

È possibile creare uno script di inizializzazione per la raccolta da eseguire dalla riga di comando del server (i documenti Mongo discutono come scrivere script Mongo ed eseguirli dalla CLI). Quindi farlo funzionare ogni volta che inizia mongod? Lo script potrebbe semplicemente chiamare ensureIndex() sull'oggetto di raccolta.

Problemi correlati