Rozpowszechnienie jest prostą techniką dostarczania właściwości ACID do modelu obiektowego w pamięci opartego na serializacji binarnej i rejestrowaniu z wyprzedzeniem. Działa to tak:
- Zacznij od migawki. Serializuj model obiektowy i zapisz go do pliku.
- Utwórz plik dziennika. Dla każdego wywołania w modelu obiektowym serializuj wywołanie i jego argumenty.
- Gdy dziennik staje się zbyt duży, wyłączasz się lub w innym przypadku jest to wygodne, wykonaj punkt kontrolny: napisz nową migawkę i skróć dziennik.
- Aby przywrócić lub przywrócić działanie po awarii lub awarii zasilania, załaduj ostatnią migawkę i ponownie uruchom wszystkie połączenia zarejestrowane w dzienniku.
Środki ostrożności potrzebne do wykonania tej pracy to:
- Nie pozwól, aby zmienne odwołania do obiektów uciekły lub nie weszły do warstwy rozpowszechnienia. Potrzebujesz jakiegoś schematu proxy lub OID, tak jakbyś robił RPC. (Jest to tak powszechny błąd początkującego, że nazywano go „ problemem chrztu ”).
- Cała logika osiągalna z połączenia musi być całkowicie deterministyczna i nie może wykonywać logicznych operacji logicznych we / wy lub systemu operacyjnego. Zapisywanie w dzienniku diagnostycznym jest prawdopodobnie prawidłowe, ale generowanie czasu systemowego lub uruchamianie asynchronicznego delegata na ogół nie. Dzieje się tak, aby dziennik był odtwarzany identycznie, nawet jeśli został przywrócony na innym komputerze lub w innym czasie. (Większość kodów rozpowszechnienia zapewnia alternatywne wywołanie czasowe w celu uzyskania znacznika czasu transakcji).
- Współbieżność pisarzy wprowadza niejednoznaczność w interpretacji czasopism, dlatego jest zabroniona.
Czy to dlatego, że ...
- ludzie poczuli do nich zły gust po tym, jak spróbowali użyć jednego z nich w projekcie, który nie był do tego dobrze przystosowany * ?
- Ostre poparcie dla Klausa Wuestefelda zniechęciło ludzi ?
- ludzie, którzy lubią imperatywny model programowania, nie lubią oddzielania operacji we / wy od obliczeń , zamiast tego wolą przeplatać obliczenia z operacjami we / wy i wątkami?
- warstwy rozpowszechnienia są tak koncepcyjnie proste i tak ściśle związane z cechami środowiska, w którym żyją, że zwykle są one opracowywane na zamówienie dla projektu, co czyni je zbyt obcymi / niestandardowymi / ryzykownymi?
- po prostu zbyt trudno jest zachować to, czego nie możesz robić ostrożnie?
- wydaje się, że głowy początkujących po prostu eksplodują w obliczu czegoś, co nie jest tym samym rodzajem aplikacji opartej na bazie danych, którą nauczyli się pisać w szkole? ;)
* Do całego zestawu danych zmieści się w pamięci RAM , nie trzeba pisarz współbieżność i nie trzeba robić ad-hoc zapytań, raportowania i wywozu do hurtowni danych. Z przeprosinami dla SQLite, rozpowszechnienie jest ulepszeniem plików zapisu, a nie zamiennikiem Oracle.