2013-02-27 11 views
8

Desidero aggiornare 3 raccolte di meteoriti in una funzione, ma solo se tutti e tre gli aggiornamenti hanno esito positivo. Altrimenti mi piacerebbe tornare indietro. C'è un buon modello per farlo ancora?Operazioni transazionali meteoriche

Grazie

+0

Partenza [ 'collection.update'] (http : //docs.meteor.com/#update). Ha un callback opzionale. Se non ci sono errori, puoi procedere con l'aggiornamento successivo. – Prashant

+2

@Prashant Non lo consiglierei perché nel secondo passaggio successivo se il nodo si blocca improvvisamente o perde l'accesso al server mongodb, la terza voce non verrebbe inserita. – Akshat

+0

Può essere gestito in caso di arresto anomalo? Quindi in pratica in entrambi i casi l'uso dei valori di stato è obbligatorio, no? – Prashant

risposta

2

meteora utilizza MongoDB per il suo database di back-end che non supporta in modo esplicito le transazioni. Ma c'è ancora un modello è possibile utilizzare: http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/

In pratica basta mettere un valore di stato in ciascuna delle vostre transazioni e solo contrassegnarli fatto quando tutto è completo

+0

E poiché 'Collection.insert' ha un parametro di callback, è possibile utilizzare il callback per finalizzare la transazione – Swadq

+0

Utilizzando il callback è necessario continuare il passaggio successivo sul lato client, fibre si prende cura del server. Il callback non lo renderebbe transazionale se il pattern di attributo dello stato della transazione non viene utilizzato. Se si verifica un'interruzione in qualsiasi fase, ad esempio un errore, si inserirà una voce e non l'altra. E se viene utilizzato il controllo degli errori nel callback, è ancora vulnerabile a un arresto anomalo del server/evento di interruzione dell'alimentazione. – Akshat