Документация MongoDB
Каждый файл данных предварительно выделяется для определенного размера. (Это сделано для предотвращения фрагментации файловой системы, среди других причин.) Первое имя файла для базы данных: .0, затем .1 и т. Д. 0 будет 64 МБ, .1 128 МБ и т. Д., До 2 ГБ. Как только размер файла достигает 2 ГБ, каждый последующий файл также имеет размер 2 ГБ.
Таким образом, если последний существующий файл данных, скажем, 1 ГБ, этот файл может быть пустым на 90%, если он был создан недавно.
Кроме того, в Unix mongod предварительно выделит дополнительный файл данных в фоновом режиме и выполнит фоновую инициализацию этого файла. Эти файлы заполнены нулевыми байтами. Эта инициализация может занять до минуты (меньше в подсистеме быстрого диска) для больших файлов данных. Предварительное заполнение в фоновом режиме предотвращает значительные задержки при следующем выделении нового файла базы данных.
В Windows дополнительные файлы данных не выделяются заранее. NTFS может распределять большие файлы, заполненные нулями, относительно быстро, что делает предварительное распределение ненужным.
Как только файл данных начнет использоваться, следующий файл будет предварительно выделен.
Вы можете отключить предварительное выделение с помощью параметра командной строки --noprealloc. Этот флаг удобен для тестов с небольшими наборами данных, где вы отбрасываете базу данных после каждого теста. Его не следует использовать на производственных серверах.
Для больших баз данных (сотни ГБ и более) это не имеет существенных последствий, поскольку нераспределенное пространство относительно мало.