mongodb oplog воспроизводит операции по отсутствующим документам

Наш клиент ежечасно создает дампы монго и отправляет их нам. Затем мы воспроизводим оплог. Однако клиент решил, что больше не хочет пересылать все дампы, а только те, которые нужны для отладки в экстренных случаях. Однако меня беспокоит то, что не отправка всего приведет к несоответствиям на нашем локальном зеркале.

Мой главный вопрос заключается в следующем: что происходит, когда вы воспроизводите оплог, содержащий операцию обновления для отсутствующего документа? Будет ли это ошибкой или просто проигнорирует операцию?

Чтобы лучше объяснить, что я имею в виду, вот пример:

  • клиент создает запись с {_id: 1} 27-11-2017
  • та же запись впервые обновлена ​​​​2017-11-28
  • клиент отправляет oplog, содержащий только операции с 2017-11-28 вперед
  • мы воспроизводим oplog локально

Что произойдет с опцией обновления для записи с {_id: 1}? Будет ли ошибка? Будет ли он проигнорирован, так как нет документа для обновления с таким _id?

P.S. в настоящее время использую монго 2.4


person XeniaSis    schedule 27.11.2017    source источник


Ответы (2)


Однако меня беспокоит то, что не отправка всего приведет к несоответствиям на нашем локальном зеркале.

Это правильно. Не отправка всего означает, что ваша копия больше не зеркало, а больше похоже на форк. Другими словами, он, вероятно, будет бесполезен для устранения неполадок/воспроизведения.

Приложение oplog предполагает, что база данных находится в определенном состоянии для ее работы. Применение оплога к случайному состоянию не имеет особого смысла, и он никогда не был предназначен для такой работы. Даже если он не падает с ошибкой утверждения, база данных находится в неопределенном состоянии.

Вы можете прочитать больше о внутренних механизмах репликации MongoDB в https://github.com/mongodb/mongo/wiki/Replication-Internals

P.S. в настоящее время использую монго 2.4

Примечание. MongoDB 2.4 устарела и больше не поддерживается. Последняя версия MongoDB на момент написания этой статьи — 3.4.10. Пожалуйста, рассмотрите возможность обновления до поддерживаемой версии.

person kevinadi    schedule 28.11.2017
comment
Мы действительно ничего не можем сделать с несогласованностью БД. Тем не менее, мой фактический вопрос заключался в том, будет ли применение oplog работать или произойдет сбой из-за отсутствия документов. Никакой документации по этому поводу не нашел. Мы работаем над обновлением mongodb, но не можем сделать это немедленно. - person XeniaSis; 28.11.2017
comment
@XeniaSis, это рухнет - person kevinadi; 29.11.2017
comment
@XeniaSis, чтобы уточнить, некоторая операция oplog приведет к сбою базы данных, например, обновление документа в удаленной коллекции. Идемпотентность oplog, вероятно, могла бы справиться с некоторыми случаями отсутствия документов, но это не гарантируется. - person kevinadi; 29.11.2017

Если клиент отправил вам ВСЕ оплоги после последнего дампа, то нет недостающей информации, которая помешала бы применить оплог, потому что вся информация (вставка, обновление, удаление) находится в оплоге.

И да. Версия 2.4 очень старая...

person JJussi    schedule 28.11.2017
comment
Проблема в том, что клиент не будет отправлять ВСЕ дампы, как указано в моем вопросе. - person XeniaSis; 28.11.2017
comment
Нужен один (полный) дамп и после него все оплоги. Не имеет значения, если этот дамп месячной давности, если вы получили все оплоги после этого. - person JJussi; 28.11.2017
comment
Я думаю, вы неправильно поняли мой вопрос - person XeniaSis; 28.11.2017