MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Abstimmungssystem mit Backbone.js

Sie müssen nicht das gesamte Modell auf dem Server speichern, nur um eine Sache zu ändern, Sie können (und sollten in diesem Fall) ein upVote hinzufügen -Methode für Ihr Modell, die einen AJAX-Aufruf "Increment Upvotes" an Ihren Server ausführt. In Ihrem Modell hätten Sie so etwas:

upVote: function() {
    var self = this;
    $.ajax({
        url: '/some/upvote/path',
        type: 'POST',
        success: function(data) {
            self.set('upVotes', data.upVotes);
        },
        // ...
    });
}

Und dann hätte die Ansicht Folgendes, um die Upvote-Aktion zu verarbeiten:

upVote: function() {
    // Highlight the upvote button or provide some other feedback that
    // the upvote has been seen.
    this.model.upVote();
}

und Sie hätten wahrscheinlich einen Listener für Änderungsereignisse in den upVotes des Modells -Eigenschaft, um den angezeigten Upvote-Zähler richtig zu erhöhen (falls Sie so etwas haben).

Außerdem dein /some/upvote/path auf dem Server würde einfach ein $inc senden aktualisieren in MongoDB, um dasselbe Problem „zwei Dinge geschehen gleichzeitig“ auf Ihrem Server zu vermeiden. Wenn Sie eine relationale Datenbank verwenden, möchten Sie am Ende so etwas wie update t set upvotes = upvotes + 1 where id = ? ausführen .

Für eine einfache Inkrementierungsoperation ist weder auf dem Client noch auf dem Server ein "Abfragen, Aktualisieren, Speichern"-Roundtrip erforderlich. Behandeln Sie das Inkrement stattdessen als einen einzelnen Inkrementvorgang und schieben Sie dieses Inkrement ganz nach unten auf Ihre letzte persistente Datenspeicherebene.