Недавно я много читал о MongoDB, но одна тема, на которую я не могу найти никакого ясного материала, заключается в том, как данные записываются в журнал и oplog.MongoDB Процессы записи и блокировки
Так это то, что я понимаю процесса до сих пор, пожалуйста, поправьте меня, где я неправильно
- Клиент подключения к mongod и выполняет запись. Запись сохраняется в буфере сокета
- Когда Mongo доступен (не уверен, какие доступные средства на данный момент), данные записываются в журнал?
- Документы mongoDB затем говорят, что каждые 60 секунд записи сбрасываются из журнала на диск. Под этим я могу только предположить, что это среднее значение написано на первичной и отплодной. Если это так, то как писать появляются раньше, чем интервал синхронизации 60 секунд?
- Спустя некоторое время второстепенные сосут данные из первичного источника или источника синхронизации и обновляют их oplog и базы данных. Кажется очень смутным, когда это происходит и что это задерживает.
Мне также интересно, если журналирование отключено (я понимаю, что это действительно плохая идея), в какой момент обновляется oplog и база данных?
Наконец-то я немного надуман, в каких точках в этом процессе создаются блокировки записи. Это просто, когда база данных и oplog обновлены или в другое время тоже?
Спасибо всем, кто может пролить свет на это или указать мне на некоторые материалы для чтения.
Simon
Спасибо за информативный ответ, я был так занят, чтобы даже ответить. Приятно знать, что я не единственный, кто не совсем понимает этот процесс. Я думаю, что я понимаю вас, но, чтобы подтвердить, вы говорите, что все данные изначально записываются в память, а затем каждые 100 мс (или независимо от того, на что он настроен) журнал записывается на диск. Затем каждые секунды SyncDelay записываются данные oplog и базы данных на диск. –
Это имеет смысл, но моя проблема заключается в том, что если данные будут удалены из памяти до того, как они будут синхронизированы с диском. Значит ли это, что изменения не будут синхронизированы? Журнал будет по-прежнему находиться на диске (синхронизация каждые 100 мс), поэтому это может быть воспроизведено, если отсутствует в памяти. Тем не менее, если память упала, данные все равно могут отсутствовать до тех пор, пока журнал не будет воспроизведен в секундах syncDelay. Вы знаете, есть ли у Монго способ борьбы с этим? Спасибо за советы по замкам тоже, что определенно прояснилось. –
Нет такой вещи, как 100% -ная безопасность. Если данные находятся только в памяти, а сервер терпит неудачу, данные будут потеряны. Если вам нужно что-то, уменьшающее вероятность того, что это произойдет, вы должны установить проблему записи w> 1 или большинства и иметь географически распределенные члены набора реплик. –