Я не совсем понимаю, как эти две функции связаны друг с другом в программе MongoDB (WiredTiger):
1) Снимки WiredTiger
2) Блокировка данных
Если каждая операция чтения с использованием механизма WiredTiger во время чтения снабжается «моментальным снимком» на уровне базы данных (для создания согласованности (C в ACID), почему тогда нам также нужна блокировка? Давайте использовать пример.
Я выполняю запрос на уровне документа (операция чтения). Итак, я знаю, что у меня есть моментальный снимок уровня базы данных, так что мои данные согласованы ДАЖЕ ЕСЛИ другой пользователь одновременно пишет в тот же самый Документ, обновляя его.
Итак, на каком этапе используется Shared-Lock для этого документа, который блокирует все операции записи (исключительные) в этом документе до тех пор, пока Shared-Lock не будет освобожден? Что может быть неправильным при написании этого документа одновременно, пока я его читаю, если я на самом деле использую моментальный снимок документа, который был предоставлен мне во время чтения? Зачем мне беспокоиться о том, заблокирован ли документ во время периода чтения или нет? У меня уже есть мои (непротиворечивые) данные за тот момент, нет?
Мне явно не хватает ключевой концепции здесь ... Любая помощь?
Спасибо.