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 :)