2012-10-29 9 views
8

Jestem zainteresowany tworzeniem aplikacji korzystającej ze struktury Meteor, która będzie odłączana od sieci przez długie okresy czasu (wiele godzin). Wierzę, że meteor przechowuje lokalne dane w pamięci RAM w strukturze mini-mongodb js. Jeśli użytkownik zamknie przeglądarkę lub odświeży stronę, wszystkie lokalne zmiany zostaną utracone. Byłoby miło, gdyby lokalne zmiany były przechowywane na dysku (localStorage? indexedDB?). Czy istnieje szansa, że ​​Meteor będzie dostępny wkrótce?Disconnected meteor application

Powiązane pytanie ... w jaki sposób Meteor radzi sobie z konfliktami dokumentów? Innymi słowy, jeśli 2 użytkowników edytuje ten sam dokument MongoDB JSON, w jaki sposób rozwiązany zostanie ten konflikt? Optymistyczne blokowanie?

Odpowiedz

4

Rozstrzyganie konfliktów to "ostatni wygrywający pisarz".

Dokładniej, każda operacja wstawiania/aktualizacji/usunięcia MongoDB na kliencie jest mapowana do RPC. RPC od danego klienta zawsze odtwarzane są w kolejności. Usługi RPC od różnych klientów są przeplatane na serwerze bez żadnej konkretnej gwarancji zamawiania.

Jeśli klient próbuje wydać wywołania RPC w stanie rozłączonym, te wywołania RPC są umieszczane w kolejce do czasu, aż klient ponownie się połączy, a następnie odtworzy na serwerze w kolejności. Gdy wielu klientów wykonuje RPC w trybie offline, kolejność, w jakiej działają na serwerze, jest ściśle zależna od tego, kiedy każdy klient ponownie się połączy.

Dla niektórych mutacji offline, takich jak MongoDB: $inc i $addToSet, model ten działa całkiem dobrze, jak jest. Jednak wiele popularnych modyfikatorów, takich jak $set, nie będzie się dobrze zachowywało podczas długich rozłączeń, ponieważ mutacja prawdopodobnie będzie kolidować z interweniującymi zmianami od innych klientów.

Budowanie aplikacji "offline" to więcej niż utrzymywanie lokalnej bazy danych. Musisz również zdefiniować wywoływanie procedur, które implementują typ rozwiązywania konfliktów. W końcu mamy nadzieję, że będziemy mieć pakiety "pod klucz", które implementują różne schematy rozdzielczości.

+0

Jeśli meteor może dodać OT jako pakiet (np. Sharejs), wówczas konflikty mogą zostać rozwiązane w lepszy sposób. – TiansHUo

+0

Doceniam odpowiedź na drugą część. Co powiesz na przypadek użycia aplikacji na tablet do zbierania nazw/e-maili na targach z brakiem/słabym internetem bezprzewodowym? W takim przypadku jest to tylko wkład do kolekcji? Jak zachowałoby się lokalne przechowywanie, czy może byłoby nawet potrzebne? –