2015-05-04 12 views
7

Il miglior approccio per memorizzare più dati utente è per utente per database. Sto usando lo stesso approccio.Come gestire la sincronizzazione pouchdb e couchdb?

Ho couchdb su server e pouchdb per applicazione mobile. Sto mantenendo ogni dato dell'utente creando un database separato per l'utente in pouchdb e couchdb. Questo significa che ho più database in couchdb e un database in pouchdb.

in genere nel database sqlbase i dati utente sono memorizzati in diverse tabelle diverse.

quindi nel pouchdb nosql sto creando un documento per ogni tabella.

vero problema che sto affrontando è:

Ho un documento in ogni database che memorizza le operazioni dell'utente.

La transazione del client viene archiviata in pouchdb quando lui/lei è offline e quando l'applicazione ottiene la sincronizzazione della transazione in linea al database utente couchdb nel documento di transazione.

dati vengono memorizzati nel documento dell'operazione è il seguente

{ 
    "_id":"transaction ", 
    "_rev":"1-3e5e140d50bf6a4d873f0c0f3e3deb8c", 
    "data":[ 
    { 
     "transaction_id":"tran_1", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }, 
    { 
     "transaction_id":"tran_2", 
     "transaction_name":"approve item", 
     "status":"Pending", 
     "ResultMsg":"" 
    }] 
} 

Tutti questi transazione viene eseguita sul lato server e il risultato viene aggiornato in queste document.when mai alcuna nuova transazione eseguita i conservarlo in documento di transazione nei dati attributo.

Ora ho 1 transazione in busta e couchdb entrambi significa che entrambi sono sincronizzati.

Ora, quando l'applicazione mobile è offline, esegue la transazione offline che è archiviata nel documento di transazione pouchdb.

e sul lato server che 1 transazione viene aggiornata per il successo.

Ora, quando l'applicazione va in linea e la sincronizzazione esegue, sto perdendo le modifiche al mio lato server e infine i dati nel documento di transazione sono come client pouchdb.

qui sto perdendo dati lato server. quindi quale è un buon approccio o come posso risolverlo.

enter image description here enter image description here

risposta

6

Quello che sta succedendo è che avete i conflitti allo stesso documento, perché viene modificato in un modo da parte del server e un altro modo da parte del cliente. Una versione contrastante sta vincendo arbitrariamente e l'altra sta perdendo.

È possibile resolve the conflicts o (la soluzione più ragionevole nel proprio caso) archiviare più documenti per utente anziché un documento di grandi dimensioni.

Solo perché si dispone di un database per utente non significa che è necessario disporre di un documento per utente. :) es tuoi documenti potrebbero essere:

{_id: "Tran_1", status: "Pending"} 
{_id: "Tran_2", status: "Pending"} 
// etc. 

Questi documenti sarebbero stati creati una sola volta sul client e aggiornati una volta sul server. Nessuna possibilità di conflitti. Pezzo di torta!

+0

Sono anche a conoscenza di questo approccio ed è la cosa migliore ma ho molti documenti nel database dell'utente come la transazione.quindi dovrei usare un documento separato per ogni record? e come gestire più dati della tabella? puoi spiegarmi che sono confuso al riguardo. –

+0

È possibile avere un documento separato per ogni combinazione di dispositivo di sessione e ogni documento contiene diversi record di transazione che vengono successivamente ridotti per ottenere lo stato di transazione finale. Questo approccio a) genera meno documenti (numero di documenti in termini di impatto DB Pouch perfomance); b) genera meno traffico; c) non genera conflitti. – ermouth