Почему пустая база данных MongoDB такая большая?

когда я создаю новый экземпляр базы данных mongoDB с командой

mongod --dbpath db

здесь db - Это папка, которую я сделал в каталоге, из которого я вызываю команду. После выполнения и проверки размера каталога, я вижу, что это закончится 300 МБ по размеру-когда там нет данных.

что здесь происходит?

Спасибо за любую помощь!


редактировать

спасибо людям говоря о предварительно выделенном размере для journal.

вот список файлов / папок в каталоге базы данных, отсортированных по порядку (сейчас в базе данных есть немного данных, но ее размер здесь невелик):

$du -ha | sort -n
4.0K    ./WiredTiger
4.0K    ./WiredTiger.lock
4.0K    ./WiredTiger.turtle
4.0K    ./WiredTigerLAS.wt
4.0K    ./mongod.lock
4.0K    ./storage.bson
8.0K    ./.DS_Store
8.0K    ./diagnostic.data/metrics.2016-06-10T11-07-50Z-00000
8.0K    ./diagnostic.data/metrics.interim
 16K    ./_mdb_catalog.wt
 16K    ./index-3-3697658674625742251.wt
 36K    ./collection-0-3697658674625742251.wt
 36K    ./index-1-3697658674625742251.wt
 36K    ./sizeStorer.wt
 44K    ./WiredTiger.wt
 60K    ./collection-2-3697658674625742251.wt
 72K    ./diagnostic.data/metrics.2016-06-10T10-19-31Z-00000
100M    ./journal/WiredTigerLog.0000000003
100M    ./journal/WiredTigerPreplog.0000000001
100M    ./journal/WiredTigerPreplog.0000000002
168K    ./diagnostic.data/metrics.2016-06-10T11-17-58Z-00000
256K    ./diagnostic.data
300M    ./journal
301M    .

как вы можете видеть, каталог журнала занимает почти все пространство.

2 ответов


в зависимости от вашей версии MongoDB и настроенного механизма хранения несколько файлов данных и метаданных будут предварительно распределены при запуске. Это ожидаемое поведение:" пустое " развертывание по-прежнему приводит к уборке и диагностическим данным.

на основе списка каталогов вы используете MongoDB 3.2, который по умолчанию использует механизм хранения WiredTiger. WiredTiger выделяет до 100 Мб на файл журнала, поэтому ваше новое развертывание имеет ~300 мб предварительно выделенного журнал файлы:

     100M    ./journal/WiredTigerLog.0000000003
     100M    ./journal/WiredTigerPreplog.0000000001
     100M    ./journal/WiredTigerPreplog.0000000002

помимо файлов журнала, другие метаданные, которые будут созданы в вашем dbpath (без явного создания баз данных) будет включать в себя:

  • A local база данных с закрытой коллекцией под названием startup_log С некоторой диагностической информацией о каждом вызове запуска этого экземпляра mongod. Там будет связанная коллекция и индексный файл для local.startup_log; в имена файлов непрозрачны, но как первые файлы, созданные, я предполагаю, в вашем примере это может быть:

     36K    ./collection-0-3697658674625742251.wt
     36K    ./index-1-3697658674625742251.wt
    
  • несколько файлов метаданных WiredTiger. В развертывании всегда будет по крайней мере одна база данных с момента local база данных создается по умолчанию для startup_log:

    4.0K    ./WiredTiger
    4.0K    ./WiredTiger.lock
    4.0K    ./WiredTiger.turtle
    4.0K    ./WiredTigerLAS.wt
     16K    ./_mdb_catalog.wt
     36K    ./sizeStorer.wt
     44K    ./WiredTiger.wt
    
  • A diagnostic.data каталог; это для периодической выборки метрик состояния сервера:

    168K    ./diagnostic.data/metrics.2016-06-10T11-17-58Z-00000
    72K    ./diagnostic.data/metrics.2016-06-10T10-19-31Z-00000
    

при создании новой базы данных MongoDB создает пространство для oplog.

oplog (журнал операций) - это специальная закрытая коллекция, которая хранит скользящую запись всех операций, которые изменяют данные, хранящиеся в ваших базах данных.