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

Perché e quando è necessario ricostruire gli indici in MongoDB?

Secondo la documentazione di MongoDB, generalmente non è necessario ricostruire regolarmente gli indici.

NOTA :Qualsiasi consiglio sullo storage diventa più interessante con MongoDB 3.0+, che ha introdotto un API del motore di archiviazione collegabile . I miei commenti di seguito si riferiscono specificamente al motore di archiviazione MMAP predefinito in MongoDB 3.0 e precedenti. WiredTiger e altri motori di archiviazione hanno implementazioni di archiviazione diverse per dati e indici.

Potrebbero esserci dei vantaggi nel ricostruire un indice con il motore di archiviazione MMAP se:

  • Un indice sta consumando una quantità di spazio maggiore del previsto rispetto ai dati. Nota:è necessario monitorare i dati storici e le dimensioni dell'indice per avere una linea di base per il confronto.

  • Vuoi migrare da un formato di indice precedente a uno più recente. Se è consigliabile un reindex, questo sarà menzionato nelle note di aggiornamento. Ad esempio, MongoDB 2.0 ha introdotto miglioramenti delle prestazioni dell'indice quindi le note di rilascio includono un reindicizzazione suggerito nel formato v2.0 dopo l'aggiornamento. Allo stesso modo, MongoDB 2.6 ha introdotto 2dsphere (v2.0) indici che hanno un comportamento predefinito diverso (sparse per impostazione predefinita). Gli indici esistenti non vengono ricostruiti dopo gli aggiornamenti della versione dell'indice; la scelta se/quando aggiornare è lasciata all'amministratore del database.

  • Hai cambiato il _id formato per una raccolta da o verso una chiave monotonicamente crescente (ad es. ObjectID) a un valore casuale. Questo è un po' esoterico, ma c'è un'ottimizzazione dell'indice che divide i bucket b-tree 90/10 (invece di 50/50) se stai inserendo _id s che sono sempre in aumento (rif:SERVER-983 ). Se la natura del tuo _id s cambia in modo significativo, potrebbe essere possibile costruire un b-tree più efficiente con un reindicizzare.

Per ulteriori informazioni sul comportamento generale dell'albero B, vedere:Wikipedia:B-tree

Visualizzazione dell'utilizzo dell'indice

Se sei davvero curioso di approfondire un po' di più l'interno dell'indice, ci sono alcuni comandi/strumenti sperimentali che puoi provare. Mi aspetto che questi siano limitati solo a MongoDB 2.4 e 2.6: