Ведение журнала MongoDB: используется ли файл журнала, когда клиент запрашивает запись без журнала, и ведение журнала ведется в Mongod
Я пытаюсь понять, как именно работает журналирование: это правильно?
Когда на стороне сервера не активировано ведение журнала (mongod --nojournal):
- (a) Если клиент запросит запись в журнале, он выдаст ошибку (начиная с версии 2.6, прежде чем она была проигнорирована),
- (b) Если клиент запрашивает запись без регистрации, ведение журнала не будет использоваться, поэтому я предполагаю, что изменения будут внесены в ОЗУ, тогда ОС будет сбрасывать изменения в файл данных каждые 60 с.
Когда ведение журнала активировано в Mongod (mongod --journal (по умолчанию в 64-битной версии):
- (a) Если клиент запрашивает запись в журнале, mongoDB будет подтверждать запись в главном узле только после передачи данных в журнал, а также, чтобы клиент не занимал слишком много времени для выполнения записи, Mongod уменьшит интервал фиксации.,
- (b) Если клиент запрашивает запись без записи в журнал, mongoDB будет использовать журнал и подтверждать запись от главного узла, не дожидаясь передачи данных в журнал.
На самом деле я ничего не нашел в официальной документации по случаю 2(b). Может ли кто-нибудь подтвердить, что журнал используется, когда j ложно на стороне клиента, но ведение журнала активировано на mongod?
1 ответ
Ваши утверждения все верны. Я думаю, что используемый вами язык сбивает с толку и, тем не менее, может немного сбить вас с толку. Клиенты не запрашивают записи в журнале или без журнала. Если ведение журнала включено, записи будут записываться в журнал независимо от того, что делает клиент. Что включает в себя клиент - это проблема записи, которая требует определенного уровня репликации данных (w
параметр) и / или ведение журнала (j
параметр) до того, как сервер ответит, что запись выполнена успешно. То, что вы подразумеваете под не журналируемой записью, j = 0
, что означает, что сервер ответит успешно, не дожидаясь, пока запись будет зафиксирована в журнале; j = 1
означает, что сервер не будет отвечать на запись, пока он не будет зафиксирован в журнале.
w
Параметр контролирует уровень репликации данных, необходимых для успешного ответа. Там более подробно в ссылке выше.