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

MongoDB Implementazione interna dell'indicizzazione?

Penso che tu abbia un'idea che gli indici siano archiviati nella RAM. E se dicessi che non lo sono.

Prima di tutto dobbiamo capire cosa sono gli indici, gli indici sono fondamentalmente un puntatore per dire dove si trova su disco quel documento. Proprio come abbiamo l'indicizzazione nel libro, per un accesso più rapido possiamo vedere quale argomento è su quale numero di pagina.

Quindi, quando vengono creati gli indici, anche questi vengono archiviati nel disco, ma quando un'applicazione è in esecuzione, in base all'uso frequente e all'accesso ancora più rapido, vengono caricati nella RAM ma c'è una differenza tra caricato e creato.

Anche caricare un indice non equivale a caricare una raccolta o record nella RAM. Se abbiamo caricato l'indice, sappiamo quali documenti devono prelevare dal disco, a differenza del caricamento di tutti i documenti e della verifica di ciascuno di essi. Quindi gli indici evitano la scansione della raccolta.

La creazione di indici è un processo una tantum, ma ogni scrittura sul documento può potenzialmente alterare l'indicizzazione, quindi potrebbe essere necessario ricalcolare alcune parti perché i record potrebbero essere mischiati in base alla modifica dei dati. ecco perché l'indicizzazione rende la scrittura lenta e la lettura veloce.

Pensa ancora una volta come un libro, se aggiungi un nuovo argomento di diciamo 2 pagine tra il libro, tutti gli indici dopo quel numero di argomento devono essere ricalcolati. di conseguenza.

  • No, i record non vengono archiviati nella RAM, mentre la crea elabora in qualche modo tutto il documento nella raccolta e crea un foglio di indice, questo sarebbe comprensibilmente dispendioso in termini di tempo se ci sono troppi documenti, ecco perché c'è un'opzione per creare un indice in background.
  • L'indice viene creato una volta, puoi eliminarlo e crearlo di nuovo, ma non verrà ricreato nell'applicazione o nel riavvio del DB. sarebbe folle per un'enorme raccolta in un ambiente frammentato.
  • Ancora una volta non è vero. _id viene fornito come campo indicizzato, quindi l'indice è già stato creato per la raccolta vuota, poiché quando esegui una scrittura, ricalcolerebbe l'indice. Poiché si tratta di un indice univoco, l'elaborazione sarebbe più rapida.
  • tutti i record verrebbero archiviati nella RAM solo quando si utilizza il motore in memoria di MongoDB, che penso sia un'edizione aziendale. A causa dell'indicizzazione, non caricherebbe automaticamente il record nella RAM.