sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB ¿Implementación interna de indexación?

Creo que tienes una idea de que los índices se almacenan en la RAM. ¿Qué pasa si digo que no lo son?

En primer lugar, debemos comprender qué son los índices, los índices son básicamente un puntero para indicar en qué parte del disco se encuentra ese documento. Al igual que tenemos la indexación en el libro, para un acceso más rápido podemos ver qué tema está en qué número de página.

Entonces, cuando se crean índices, también se almacenan en el disco, pero cuando se ejecuta una aplicación, según el uso frecuente y el acceso aún más rápido, se cargan en la RAM, pero hay una diferencia entre cargado y creado.

Además, cargar un índice no es lo mismo que cargar una colección o registros en la RAM. Si tenemos un índice cargado, sabemos qué documentos recoger del disco, a diferencia de cargar todos los documentos y verificar cada uno de ellos. Por lo tanto, los índices evitan el análisis de colecciones.

La creación de índices es un proceso único, pero cada escritura en el documento puede alterar potencialmente la indexación, por lo que es posible que se deba volver a calcular alguna parte porque los registros pueden mezclarse según el cambio en los datos. es por eso que la indexación hace que la escritura sea lenta y la lectura rápida.

Nuevamente, piense en un libro, si agrega un nuevo tema de, digamos, 2 páginas entre el libro, todos los índices después de ese número de tema deben volver a calcularse. respectivamente.

  • No, los registros no se almacenan en la memoria RAM, mientras que al crearla se procesan todos los documentos de la colección y se crea una hoja de índice, esto llevaría mucho tiempo comprensiblemente si hay demasiados documentos, por eso hay una opción para crear un índice en segundo plano.
  • El índice se crea una vez, puede eliminarlo y volver a crearlo, pero no se volverá a crear en la aplicación o en el reinicio de la base de datos. eso sería una locura para una gran colección en un entorno fragmentado.
  • De nuevo, eso no es cierto. _id viene como un campo indexado, por lo que el índice ya está creado para una colección vacía, ya que cuando escribe, recalcularía el índice. Dado que es un índice único, el procesamiento sería más rápido.
  • Todos los registros solo se almacenarán en la RAM cuando utilice el motor en memoria de MongoDB, que creo que viene como edición empresarial. Debido a la indexación, no cargaría automáticamente el registro en la RAM.