Отказ от ответственности Это все, что касается меня, так что, пожалуйста, не распинайте меня, если у меня есть ошибка. Однако, пожалуйста, поправьте меня.
Зачем им это?
- Предпосылка: Базы данных, по определению, не связаны между собой
- oplog entries are always idempotent
- Oplog является capped collection, with a guarantee of preserving the insert order
Давайте предположим, что истинный параллелизм запросов применяется. Итак, у нас есть два запроса, поступающих в одно и то же время, и нам нужно будет решить, какой из них нужно сначала вставить в oplog. Первый, берущий замок, напишет первым, верно? Кроме того, есть проблема. Предположим, что первый запрос является простым db.collection.update({_id:"foo"},{$set:{"bar":"baz"}})
, в то время как другой запрос является более сложным, и поэтому для проверки правильности требуется больше времени. Таким образом, чтобы предотвратить это, замок должен был быть сделан по прибытии и выпущен после записи записи idempotent oplog.
Вот где я должен полагаться на моей памяти
Однако запросы не применяются параллельно. Запросы поставлены в очередь и оцениваются в порядке поступления. База данных get блокируется приложением запросов после запуска оптимизатора запросов. Во время этой блокировки запросы idempotent oplog записываются в oplog. Поскольку базы данных не взаимосвязаны, и только один запрос может быть применен к базе данных в любой момент времени, достаточно блокировки в базе данных.
Никаких двух запросов на изменение данных не может быть применено к одной и той же базе данных в любом случае, так почему же следует установить блокировку в oplog?
Видимо, блокировка берет локальную базу данных. Однако, поскольку блокировка уже взята на данные, я не вижу причины.* царапиныMyHead *
Хм, я прочитал документы, но я до сих пор не могу в это поверить. Поскольку записи oplog являются идемпотентными, и база данных заблокирована в приложении, на самом деле не было бы необходимости в этом ... Я действительно не понимаю. –
Это сообщение в блоге также стоит прочитать. Автор столкнулся с этой «глобальной блокировкой» при разработке метрической системы реального времени. – Jaco
Забыл добавить ссылку: ссылка: http: //daprlabs.com/blog/blog/2014/04/19/mongodb/. Обратите внимание, что блоггер работает для Microsoft, и некоторые его выводы кажутся несколько предвзятыми. – Jaco