Как работает ведение журнала MongoDB
Вот мое мнение, и я не уверен, правильно это или нет:
Журнал журнала - это журнал повторов. Он записывает изменения файлов данных.
Например, я хочу изменить значение поля одной записи с 'a' на 'b', тогда mongodb найдет, как изменить dbfile (включая все пространство имен, данные, индекс и т. Д.), Затем mongodb напишет изменения в журнале.
После этого mongodb делает все реальные изменения в dbfile. Если что-то пойдет не так, при перезапуске mongoDB он будет читать журнал (если он существует). Затем он изменит файл alter, чтобы сделать набор данных согласованным.
Таким образом, в журнале данные для изменения не записываются, а вместо этого, как изменить файл базы данных.
Я прав? где я могу получить больше информации о формате журнала?
1 ответ
РЕДАКТИРОВАТЬ: моя первоначальная ссылка на презентацию в MongoSF в 2011 году Дуайта теперь мертва, но есть презентация 2012 года Бена Беккера с похожим содержанием.
На всякий случай, когда это перестает работать в какой-то момент, я кратко расскажу о том, как работал журнал в исходном механизме хранения MMAP, но следует отметить, что с появлением модели сменного механизма хранения (MongoDB 3.0 и более поздних версий) теперь это полностью зависит от используемого вами механизма хранения (и, возможно, от опций), поэтому, пожалуйста, проверьте.
Вернуться к исходному (MMAP) журналу механизма хранения. На очень элементарном уровне журнал содержит ряд операций с очередями, и все операции записываются в него по мере их появления - в основном это добавление только последовательной записи на диск.
После того, как эти операции были применены и записаны на диск, они больше не нужны в журнале и могут быть устаревшими. В этом смысле журнал в основном действует как кольцевой буфер для операций записи.
Внутренне операции в журнале хранятся в "группах фиксации" - логической группе операций записи. Когда операция находится в полной группе фиксации, ее можно считать синхронизированной с диском как часть журнала (и она удовлетворит j:true
напишите озабоченность например). После нечистого отключения mongod
будет пытаться применить все полные группы фиксации, которые ранее не были записаны на диск, неполные группы фиксации будут отброшены.
Операции в журнале - это не то, что вы увидите в оплоге, скорее, это более простой набор файлов, смещений (в основном, места на диске) и данных, которые должны быть записаны в этом месте. Это обеспечивает эффективное воспроизведение данных и компактный формат журнала, но для большинства из них содержимое выглядит как бред, в отличие от вышеупомянутого оплога, который в основном читается как документы JSON. Это, в основном, отвечает на один из поставленных вопросов - он не знает о содержимом файла базы данных и изменениях, которые необходимо внести в него, это еще проще - он в основном знает только перейти на диск X и записать данные Y, вот и все.
Последовательный характер записи с опережением записи означает, что он хорошо помещается на вращающемся диске, и шаблон последовательного доступа обычно не соответствует шаблонам доступа к данным MMAP (хотя не обязательно шаблонам доступа других механизмов). Следовательно, иногда полезно поместить журнал на собственный диск или раздел, чтобы уменьшить количество конфликтов ввода-вывода.