MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Implémentation interne de l'indexation ?

Je pense que vous avez une idée que les index sont stockés dans la RAM. Et si je dis qu'ils ne le sont pas.

Tout d'abord, nous devons comprendre ce que sont les index, les index sont essentiellement un pointeur pour indiquer où se trouve ce document sur le disque. Tout comme nous avons l'indexation dans le livre, pour un accès plus rapide, nous pouvons voir quel sujet se trouve sur quel numéro de page.

Ainsi, lorsque des index sont créés, ils sont également stockés sur le disque, mais lorsqu'une application est en cours d'exécution, en raison de l'utilisation fréquente et d'un accès encore plus rapide, ils sont chargés dans la RAM, mais il existe une différence entre chargé et créé.

De plus, le chargement d'un index n'est pas le même que le chargement d'une collection ou d'enregistrements dans la RAM. Si l'index est chargé, nous savons quels documents récupérer sur le disque, contrairement au chargement de tous les documents et à la vérification de chacun d'eux. Ainsi, les index évitent l'analyse de la collection.

La création d'index est un processus unique, mais chaque écriture sur le document peut potentiellement modifier l'indexation, de sorte qu'une partie peut devoir être recalculée car les enregistrements peuvent être mélangés en fonction de la modification des données. c'est pourquoi l'indexation rend l'écriture lente et la lecture rapide.

Encore une fois, pensez à un livre, si vous ajoutez un nouveau sujet de disons 2 pages entre le livre, tous les index après ce numéro de sujet doivent être recalculés. en conséquence.

  • Non, les enregistrements ne sont pas stockés dans la RAM, alors que leur création traite en quelque sorte tous les documents de la collection et crée une feuille d'index, cela prendrait du temps, ce qui est compréhensible s'il y a trop de documents, c'est pourquoi il y a une option pour créer un index en arrière-plan.
  • L'index est créé une seule fois, vous pouvez le supprimer et le recréer, mais il ne sera pas recréé au redémarrage de l'application ou de la base de données. ce serait fou pour une énorme collection dans un environnement partagé.
  • Encore une fois, ce n'est pas vrai. _id vient en tant que champ indexé, donc l'index est déjà créé pour une collection vide, car lorsque vous faites un write , il recalcule l'index. Comme il s'agit d'un index unique, le traitement serait plus rapide.
  • tous les enregistrements ne seraient stockés dans la RAM que lorsque vous utilisez le moteur en mémoire de MongoDB, qui, je pense, est une édition d'entreprise. En raison de l'indexation, il ne chargerait pas automatiquement l'enregistrement dans la RAM.