Różnice między trybem sync i nosync w bazach danych

0

Zastanawiam się nad różnicami między trybem sync i nosync przy bazach danych (głównie SQLite, choć nie jest to związane ściśle z konkretną bazą). Jaka jest roznica miedzy trybem sync i nosync? Domyslam sie, ze przy nosync nie zrzuca wszystkiego na dysk, tylko trzyma w pamieci (dobrze mysle?). Wiec pytanie - w ktorym momencie zapisywane sa dane na dysk?

0

nosync nie czeka na zakończenie wszystkich transakcji, przez co jest szybsze, ale może zwrócić nieaktualne/nieprawidłowe dane.

0

sync (w PostgreSQL fsync) - przed zwróceniem kontroli do programu wywołującego polecenie, po zakończeniu transakcji system bazodanowy wykonuje komendę fsync, aby wymusić na systemie operacyjnym fizyczne przesłanie danych na dysk. Kontrola jest zwracana dopiero po upewnieniu się, że dane znalazły się na dysku.

nosync - dane są zapisywane tylko za pomocą zwykłych poleceń dostępu do dysku (write/fwrite), przez co wcale nie muszą się znaleźć na dysku od razu, a dopiero po jakimś czasie od zakończenia transakcji. OS ma bufory operacji we/wy, w których może tymczasowo przechowywać dane do zapisu.

W trybie sync, jeśli w trakcie pracy wysiądzie prąd, jest gwarancja, że dane w bazie będą zawsze spójne i nic się nie uszkodzi, w trybie nosync pewne wykonane transakcje mogą zostać zgubione, tabele/indeksy uszkodzone itp... W systemach produkcyjnych stosowanie nosync jest praktycznie niedopuszczalne.
Nosync jest jednak nieco szybszy, ale fsync można przyspieszyć przez równoległe wykonywanie transakcji (1 fsync na kilka transakcji).

nosync nie czeka na zakończenie wszystkich transakcji, przez co jest szybsze, ale może zwrócić nieaktualne/nieprawidłowe dane.

Jakich transakcji? Mógłbyś jaśniej? :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1