У нас есть коллекция данных журнала, где каждый документ в коллекции идентифицируется MAC-адресом и календарным днем. В основном:
{
_id: <generated>,
mac: <string>,
day: <date>,
data: [ "value1", "value2" ]
}
Каждые пять минут мы добавляем новую запись журнала в массив данных в текущем дневном документе. Документ переливается в полночь UTC, когда мы создаем новый документ для каждого MAC.
Мы заметили, что IO, измеряемый байтами, увеличивается в течение всего дня, а затем падает в полночь по UTC. Этого не должно быть, потому что скорость сообщений журнала постоянна. Мы считаем, что неожиданное поведение связано с переводом документов Mongo, а не с обновлением их журнальных массивов. Для того, что стоит, stats()
показывает, что paddingFactor равен 1.0299999997858227.
Несколько вопросов:
- Есть ли способ подтвердить, обновляется ли Mongo на месте или перемещается? Мы видим некоторые шаги в медленном журнале запросов, но это похоже на анекдотические доказательства. Я знаю, что могу
db.setProfilingLevel(2)
, затемdb.system.profile.find()
и, наконец, искать"moved:true"
, но я не уверен, нормально ли это делать в загруженной производственной системе. - Размер каждого документа является очень предсказуемым и регулярным. Предполагая, что монго совершает много ходов, какой лучший способ выяснить, почему Монго не способен более точно определить более? Или сделать Монго более точным? Предполагая, что приведенное выше описание проблемы правильное, настройка коэффициента заполнения не выглядит так, как будто бы это трюк.
- Мне должно быть достаточно легко назначить документ и удалить любые догадки от Mongo. (Я знаю, что фактор дополнения говорит, что мне не нужно это делать, но мне просто нужно поставить эту проблему позади меня.) Какой лучший способ президировать документ? Кажется, просто написать документ с полем байтового массива мусора, а затем сразу удалить это поле из документа, но есть ли какие-либо ошибки, о которых я должен знать? Например, я могу себе представить, что нужно дождаться на сервере операции записи (т.е. Сделать безопасную запись) перед удалением поля мусора.
- Я был обеспокоен предварительным распределением всех дневных документов примерно в то же время, потому что, похоже, это насытило бы диск в то время. Является ли это серьезной проблемой? Должен ли я попытаться распространить расходы на предварительное распределение за предыдущий день?