2016-06-03 3 views
1

В одной из коллекций есть документы с полем "sc":[float]. Я хочу перебрать все документы и изменить это на "sc": float, т. Е. Удалить массив и присвоить значение float непосредственно ключу.MongoDB, WiredTiger: необходимо обновить одно поле во всех документах (700 тыс.). Какие побочные эффекты произойдут?

Не правда ли, что WiredTiger добавляет все обновленные документы вместо попыток сделать некоторые обновления на месте, такие как MMap?

Это в основном удваивает размер базы данных, при этом исходная половина является устаревшими данными.

Нужно ли мне звонить mongod -repair, чтобы отменить эти устаревшие документы, или есть что-то еще, что мне нужно сделать?

ответ

1

WT всегда переписывает документы при обновлении, но вместо NMAP он не использует отступы и не выделяет документы в свободные блоки, поэтому, если у нас есть документ 1,2,3 - есть вероятность, что no1 будет перемещен в конец файла (или ближайший разрыв), а no2 будет выделен в предыдущем пространстве no1.

что важно о WT:

WiredTiger делает постоянное уплотнение и повторное использование пространства автоматически.

Для обеспечения эффективности использования файла мы можем заставить WT использовать меньший размер страницы согласно обсуждению this.

--wiredTigerCollectionConfigString="leaf_page_max=8KB" 

Также compact может использовать для освобождения места more here.

+0

Спасибо за объяснение. Я проверил его (несколько недель назад) на дублированном наборе данных и увидел, что все в порядке, поэтому я просто применил его к текущему набору данных. Это сработало, и до вашего объяснения мне стало интересно, почему. Мне просто не приходило в голову, что они будут повторно использовать освобожденное пространство ... стыдно за меня. –

Смежные вопросы