2012-10-29 12 views
8

Sono interessato a creare un'applicazione utilizzando il framework Meteor che verrà disconnesso dalla rete per lunghi periodi di tempo (più ore). Credo che la meteora memorizzi i dati locali nella RAM in una struttura mini-mongodb js. Se l'utente chiude il browser o aggiorna la pagina, tutte le modifiche locali vengono perse. Sarebbe bello se le modifiche locali fossero persistite su disco (localStorage? indexedDB?). Qualche possibilità che arriverà presto per Meteor?Applicazione meteorite disconnessa

Domanda correlata ... In che modo Meteor gestisce i conflitti di documenti? In altre parole, se 2 utenti modificano lo stesso documento JSON MongoDB, come viene risolto questo conflitto? Blocco ottimistico?

risposta

4

La risoluzione del conflitto è "l'ultimo autore vince".

In particolare, ogni operazione di inserimento/aggiornamento/rimozione di MongoDB su un client viene associata a un RPC. Gli RPC di un determinato client riproducono sempre in ordine. Gli RPC di diversi client sono interconnessi sul server senza alcuna garanzia di ordinamento particolare.

Se un client tenta di emettere RPC mentre sono disconnessi, questi RPC si accodano fino a quando il client si riconnette e quindi riproduce il server in ordine. Quando più client eseguono RPC non in linea, l'ordine che eseguono sul server dipende in modo preciso dal momento in cui ciascun client si riconnette.

Per alcune mutazioni offline come MongoDB's $inc e $addToSet, questo modello funziona abbastanza bene così com'è. Ma molti comuni modificatori come $set non si comportano molto bene su disconnessioni lunghe, poiché probabilmente la mutazione è in conflitto con le modifiche intervenute da altri client.

Quindi creare app "offline" è più che persistere nel database locale. È inoltre necessario definire RPC che implementano un tipo di risoluzione dei conflitti. Alla fine speriamo di avere pacchetti chiavi in ​​mano che implementano vari schemi di risoluzione.

+0

Se la meteora può aggiungere OT come pacchetto (ad esempio sharejs), i conflitti possono essere risolti in un modo migliore. – TiansHUo

+0

Apprezzo la risposta alla seconda parte. Che ne dici di un caso di utilizzo per un'app per tablet per la raccolta di nomi/e-mail in una fiera con wireless/scarso? In tal caso è solo inserti per una collezione? Come si potrebbe persistere nello storage locale o sarebbe addirittura necessario? –

Problemi correlati