• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wie führe ich die Rollbacks und die Commits korrekt in meiner Node-Applikation aus?

Tabula_Rasa

Mitglied
Hallo zusammen,

ich benutze folgendes Modul: https://www.npmjs.com/package/mssql.

Ich habe die Dokumentation angeschaut und da führen die nur eine Request mit Rollback und Commit durch - ich habe jedoch drei und erhielt andauernd Fehler. Aus diesem Grund wollte ich hier mal nachfragen, wie ich die Requests in der Transaction gestalten muss.

Javascript:
router.post('/post/sichern', (req, res, next)=> {

    const transaction = new sql.Transaction();
    const request1 = new sql.Request();
    const request2 = new sql.Request();
    const request3 = new sql.Request();
    const analysen = req.body.analysen; // Array of objects of type {id: number, name:string}

    request1.input('o_id', req.body.order.id);
    request2.input('o_id', req.body.order.id);

    const query1 = 'Update orders set ais=1 where o_id=@o_id'; // für request1
    const query2 = 'Delete from analysen where o_id=@o_id'; // für request2
    
    transaction.begin(async error => {
        if(error) return res.status(500).json(error);

       // Hier müssen die Requests hin mit Rollback bei einem Fehler und Commit bei keinem
      
    })

})

Der request3 ist dafür da, die Analysen in die Datenbank einzufügen, jedoch bin ich mir nicht sicher, ob ich diese in einer Loop einfügen soll, weil ich da auch Fehler erhielt. Aus diesen Gründen wollte ich hier mal nachfragen, damit ich verstehe, wie eine Transaction mit mehreren Requests und deren Commits und Rollbacks aussehen muss.
 
Werbung:
Vermutlich liegt das Problem hier:

Wenn ich das Konzept richtig verstehe ist es so, dass zu jeder Transaktion ein und nur ein Commit oder Rollback gehört, aber mehrere Requests darin möglich sind. Wenn Du jeden deiner Requests mit einem eigenen Commit oder Rollback versehen willst, musst Du auch für jeden eine Transaktion aufmachen.
Und wenn ich das Konzept von Transaktionen weiter richtig verstehe, liegt die Stärke vor allem darin, dass die Konsistenz der Datenbank sicher gestellt werden kann, wenn z. B. alle von drei Requests, zwischen denen Abhängigkeiten bestehen, erfolgreich sein müssen. Schlägt einer fehl, kann man die ganze Transaktion zurück rollen und die Datenbank ist wieder konsistent.
So weit mein Verständnis dieser Sache aber Datenbanken sind nicht unbedingt mein Schwerpunkt.
Hey, du hast vollkommen recht. Mein Fehler war, dass ich innerhalb einer Transaktion mehrmals commitet habe (dachte nämlich man müsse nach jeder Request committen). Ein Commit am Ende reicht vollkommen aus.
 
Zurück
Oben