Я прохожу онлайн-курс MongoDB. Я только что посмотрел видео "Влияние журналирования на резидентную память", в котором описывается, как работает MongoDB. с данными в памяти и как они сохраняются на диск. Я также прочитал эти статьи о ведении журнала MongoDB:
Кажется, я не могу понять обоснование концепции частного просмотра.
Насколько я понимаю, когда в качестве механизма хранения используется MMAPv1 и включено журналирование, с данными в MongoDB происходят следующие вещи:
- Когда MongoDB запускается, существующие файлы данных отображаются в виртуальную память с помощью отображения памяти (см. mmap). . Эта область виртуальной памяти называется общее представление.
- Затем общее представление переназначается в другую часть виртуальной памяти, называемую личным представлением. Логически (не физически) похоже, что все данные дублируются между двумя представлениями.
- При операции записи изменения применяются к частному представлению.
- Изменения также сохраняются (инкрементально) в файл журнала.
- После подтверждения сохранения изменений в журнале они также применяются к общему представлению.
В какой-то момент после этого общее представление будет сброшено в файлы данных на диске (это называется синхронизацией).
В какой-то момент общий вид также будет переназначен на частный вид.
Вопрос
Зачем вообще нужен приватный просмотр? Похоже, что данные в нем не используются ни для чего, для чего нельзя использовать общий вид. Почему изменения не применяются непосредственно к общему представлению перед записью в журнал? Это сделало бы частный просмотр ненужным, а размер MongoDB в виртуальной памяти уменьшился бы вдвое.