Uczę się o MVCC na przykładzie postgreSQL i chciałbym tutaj tylko upewnić się czy dobrze myślę.
Technika MVCC w postgreSQL jest użyteczna przy skalowalnym dostępie do danych. Polega to na tym, że każdy update nie stosujący operatora w stylu += stworzy nowy rekord w bazie o nowym zakresie widoczności, a poprzedni stary zachowa z unieważnionym zakresem ważności.
Zastanawiałem się co na tym zyskuje skalowalność. Programując współbieżnie w C++ do modyfikowania współdzielonych danych używałem mechanizmy synchronizacji. Zastanawiałem się, czemu to nie była jedyna droga wyjścia z tej sytacji.
Koniec końców doszedłem do wniosku, że zwykłe ustawienie nowej wartości w bazie danych nie musi być synchronizowane, ponieważ jakie ma znaczenie jaka wartość była wcześniej, a jaka będzie później? O tę kolejność najważnejszej wartości zadba wersjonowanie rekordów.
Natomiast w przypadku powiększania i pomniejszania obecny stan wartości ma znaczenie, dlatego tylko wtedy nakłada się blokadę na rekord.
Proszę o sprawdzenie i sprostowanie, gdyby okazało się, że to są głupoty :)