2013-02-27 9 views
8

Ich möchte 3 Meteor-Sammlungen in einer Funktion aktualisieren, aber nur, wenn alle drei Aktualisierungen erfolgreich sind. Ansonsten würde ich gerne zurückrollen. Gibt es dafür ein gutes Muster?Meteor-Transaktionsoperationen

Dank

+0

Check out [ 'collection.update'] (http : //docs.meteor.com/#update). Es hat einen optionalen Rückruf. Wenn keine Fehler vorliegen, können Sie mit dem nachfolgenden Update fortfahren. – Prashant

+2

@Prashant würde ich nicht empfehlen, da im zweiten nachfolgenden Schritt, wenn der Knoten plötzlich abstürzt oder den Zugriff auf den mongodb-Server verliert, der dritte Eintrag nicht eingefügt wird. – Akshat

+0

Kann das bei einem Absturz gehandhabt werden? Also ist grundsätzlich jede Art der Verwendung von Statuswerten obligatorisch, oder? – Prashant

Antwort

2

Meteor verwendet mongodb für seine Datenbank-Backend, die nicht explizit Transaktionen unterstützen wird. Aber es immer noch ein Muster ist, könnten Sie verwenden: http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/

Im Grunde nur Sie in jedem Ihrer Transaktionen einen Zustandswert setzen und nur markieren sie getan, wenn alles abgeschlossen ist

+0

Und da 'Collection.insert' über einen Rückrufparameter verfügt, können Sie den Rückruf verwenden, um die Transaktion abzuschließen. – Swadq

+0

Die Verwendung des Rückrufs ist erforderlich, um mit dem nächsten Schritt auf der Clientseite fortzufahren. Fibers kümmert sich um den Server. Der Rückruf würde es nicht transaktional machen, wenn das Transaktionszustandsattributmuster nicht verwendet wird. Wenn es in irgendeiner Phase eine Unterbrechung gibt, wie zum Beispiel einen Fehler, wäre ein Eintrag in und nicht der andere. Und wenn die Fehlerprüfung im Callback verwendet wird, ist sie immer noch anfällig für einen Serverabsturz/Stromausfall. – Akshat