2011-08-09 11 views

Odpowiedz

20

MongoDB użył blokady zapisu w całym procesie, aby zagwarantować, że tylko jedna operacja zapisu (aktualizacja/wstawienie/usunięcie) może zostać wykonana na raz. Jako taki automatycznie rozwiązuje problemy współbieżności, ponieważ współbieżność zapisu jest po prostu niedozwolona.

Jeśli 4 wątki podejmą próbę aktualizacji, jeden z nich wykona blokadę zapisu, wykona aktualizację i zwolni blokadę. Następnie jeden z pozostałych 3 pobierze blokadę, wykona aktualizację, itp.

Współbieżność wchodzi w grę, jeśli operacja nie może zostać zapakowana w pojedynczą operację zapisu. Zauważ, że dla najbardziej typowego użycia (znajdź dokument, zaktualizuj go i pobierz atomowo nową wersję) MongoDB oferuje polecenie "findAndModify", które właśnie to: http://www.mongodb.org/display/DOCS/findAndModify+Command

AKTUALIZACJA: Blokowanie jest bardziej ziarniste w tych dniach.

+0

Dzięki, rozumiem, dlaczego wydawało się to powszechnie znane. – lollancf37

+0

Nie ma za co. Wydaje się, że jest to funkcja ograniczająca, ale ponieważ zapisy są stosunkowo szybkie, rzadko jest to problem z wydajnością. Zwróć uwagę na "zablokowany%" w mongodzie, aby zobaczyć, ile czasu spędzasz przy zamkniętym zamku. –

3

Zastosowanie modifier operations:

$inc $set $unset $push $pushAll $addToSet $pop $pull $pullAll $rename $bit

wszystkie z nich są niepodzielne.

+0

Dzięki za wskazanie tego artykułu, ale nie wydaje się, że gwarantuje, że jesteś jedynym, który pisze na konkretnej kolekcji nie? – lollancf37

+2

tak długo, jak używasz operacji modyfikatora, nie ma znaczenia, ile masz równoczesnych zapisów. –