mongodb

¿MongoDB reutiliza el espacio eliminado?



(1)

En primer lugar, sé de esta pregunta:

¿Auto compacta el espacio eliminado en mongodb?

Sin embargo, mi pregunta no se trata de reducir el tamaño de los archivos DB, sino más bien de la reutilización del espacio eliminado. Digamos que tengo 100K documentos en una colección, luego borro 50K de esos. ¿Mongo reutilizará el espacio dentro de su archivo de datos que los documentos eliminados han liberado? ¿O simplemente están "marcados" como eliminados?

No me importa mucho el tamaño real del archivo en el disco, sino más bien "crece y crece".


Actualización (marzo de 2015): a partir de la versión 3.0, hay varios motores de almacenamiento disponibles en MongoDB. Esta respuesta se aplica al motor de almacenamiento MMAP (que sigue siendo el predeterminado en MongoDB 3.0), la respuesta para otros motores (por ejemplo, WiredTiger) es bastante diferente y bien puede ser ajustable y ajustable. Por lo tanto, si está utilizando otro motor, lea los documentos relevantes de ese motor de almacenamiento para determinar cuáles son sus opciones y valores predeterminados de reutilización de espacio.

Con el motor de almacenamiento MMAP, cuando se eliminan los documentos, el espacio que queda se coloca en una lista gratuita. Sin embargo, para usar el espacio, habrá que insertar documentos de tamaño similar más adelante, y MongoDB tendrá que encontrar un espacio adecuado para ese documento dentro de un período de tiempo determinado (una vez que se agote el tiempo para ver la lista, solo se adjuntará) de lo contrario La reutilización del espacio no va a suceder muy a menudo. Esta eliminación se realiza dentro de los archivos de datos, por lo que no se realiza aquí la recuperación de espacio en disco; todo esto se realiza internamente dentro de los archivos de datos existentes.

Si posteriormente realiza una repair , o vuelve a sincronizar un secundario desde cero, los archivos de datos se reescriben y el espacio en el disco se recuperará (también se eliminará cualquier relleno en los documentos). Aquí es donde verá la recuperación de espacio real en el disco. Para cualquier otra acción ( compact incluida), el uso del disco no cambiará e incluso puede aumentar.

Con 2.2+ ahora puede usar el comando collMod y la opción usePowersOf2Sizes para hacer más probable la reutilización del espacio eliminado (tenga en cuenta que este es el valor predeterminado en 2.6 +). Esto significa que la asignación de espacio inicial para un documento es un poco menos eficiente (512 bytes para un documento de 400 bytes por ejemplo) pero significa que cuando se inserta un nuevo documento es más probable que pueda reutilizar ese espacio. Si está borrando (o creciendo y, por lo tanto, moviendo) documentos, entonces esto será más eficiente a largo plazo.

Para cualquiera que esté interesado, una de las personas que escribió gran parte del código de almacenamiento ( Mathias Stearn ) tiene una excelente presentación sobre los elementos internos de almacenamiento, que puede encontrar aquí.