Ist es möglich, die Transaktion, die Verarbeitung mit node.js und eine noSQL db?
Ich spreche nicht über echtes Geld Transaktionen
Dem Projekt an dem ich arbeite, ist ein Spiel, wo Spieler Handel Zeug zwischen einander. Es ist im Grunde eine Transaktion Prozess, Spieler A gibt Spieler B 10 Grütze im Austausch für dreißig Kühe, Sie bekommen die Idee.
Aber wie es ist interaktiv und es gibt viele Spieler auf einmal, in einer Chat-Umgebung wie alle trading zufällig fragte ich mich, ob es möglich war, solch ein Ding mit node.js
aber ich sehe Probleme.
Ich komme aus einer DB im hintergrund, wo die Verarbeitung von Transaktionen und die Art der rollback
und commit
sind notwendig, um den DB-Zustand der Gesundheit. Aber wenn wir reden node.js
plus mongoDB
(oder jede andere noSQL-DB für diese Angelegenheit) , ist sicherlich eine ganz andere Mentalität, aber ich weiß einfach nicht, wie es verkraften könnte, einen Handel in dem Sinne, dass nur zwei Parteien beteiligt werden sollten, ohne Rückgriff auf irgendeine form von sperren, aber das ist wohl nicht das, was node
ist.
Habe ich nicht gefunden, noch nichts, aber das wundert mich nicht, weil node.js
so neu ist.
UPDATE ich bin mir bewusst, die Mechanismen einer Transaktion - und insbesondere banking-Stil-Transaktionen, aber das ist nicht das gleiche. Ich kann es noch nicht gemacht haben klar, aber das Problem ist, dass Spieler B ist etwas zu verkaufen, zu einer Gemeinschaft von Käufern.
Dass bedeutet, dass, obwohl Spieler A initiiert eine Kauf-Anleitung auf der client-Seite ist es auch möglich, dass in der gleichen Zeit, die Spieler C, D oder E auch Klicks kaufen die gleiche Kuh.
Nun in eine normale Transaktion wird erwartet, dass zumindest die erste person, der erhält ein Rekord-Niveau Tabelle Sperre mindestens Blöcke der anderen Parteien fortgesetzt werden, an diesem Punkt in der Zeit.
Jedoch die Art der Nutzung von Knoten und insbesondere seine Geschwindigkeit, gleichzeitige Verarbeitung und Nutzung der für die Anzeige von Echtzeit-updates der Datenbank bedeuten, ich könnte mir leicht vorstellen, dass die langsamste person (wir reden hier von Millisekunden) gewinnt.
Beispielsweise Spieler A initiiert den Kauf der gleichen Zeit wie Spieler C. Spieler Eine Transaktion abgeschlossen und die Grütze bezahlt werden, zu Spieler B, und die Kuh ist zugewiesen zu Player A auf die Datenbank. Eine Millisekunde später ist die Kuh zugeordnet zu Spieler C.
Ich hoffe das erklärt das Problem besser.
InformationsquelleAutor T9b | 2012-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies hat nichts zu tun mit Node.JS. Node.JS nur eine Verbindung zur Datenbank herstellt und Transaktionen erfolgt durch die Datenbank selbst (es sei denn, Sie manuell zu implementieren Transaktionen in Node.JS,, die vielleicht etwas schwierige Aufgabe - aber das ist das gleiche für jeden web-server in einer beliebigen Sprache geschrieben).
Können Sie ganz einfach verwenden Sie (zum Beispiel) mit MySQL Node.JS die Transaktionen unterstützt. So die Frage, die Sie Fragen, ist: kann ich tun, Transaktionen mit MongoDB? Die Antwort ist: Nein und ja.
Nein, da MongoDB keine Transaktionen unterstützt out of the box.
Ja, da kann man einige tricks anwenden, nachahmen-Transaktionen. Siehe zum Beispiel dieser Artikel.
InformationsquelleAutor freakish
Tun-banking-Stil Transaktionen mit einer Dokumenten-Datenbank, es ist typisch für die Verwendung einer Transaktion-Protokoll-Muster. In dieses Muster würden Sie schreiben jedes Transaktion wie es ist ein eigenes Dokument. Sie nicht pflegen Dokumente entsprechend jedem Konto Gleichgewicht. Stattdessen Rollen Sie die Transaktion Dokumente bis zum Zeitpunkt der Abfrage, geben den aktuellen Kontostand an(s).
Hier ist ein Beispiel, gilt für Couchbase Karte reduzieren: http://guide.couchdb.org/draft/recipes.html
InformationsquelleAutor J Chris A
Arbeite ich an einer oss-Anwendung-level-Transaktion-Datenbank für node.js genannt Wasserlinie.
Starteten wir mit voller CRUD-mutices, merkte aber bald, dass war ziemlich hart. Besser zu verlassen, dass die Datenbank. Aber manchmal wollen Sie nicht-denn Sie wollen in der Lage sein zu wechseln, Datenbanken und halten Ihre code-Agnostiker. So dann haben wir vereinfacht an die nächste einfachste Stück-benannt Transaktionen.
So, keine rollback-Unterstützung (Sie haben noch zu tun, dass Sie sich für jetzt), aber zumindest Wasserlinie verhindert gleichzeitigen Zugang für Sie.
In deinem Beispiel (angenommen, Sie sind in express/connect/Segel) es könnte so Aussehen:
Hoffe, das hilft. Ich begrüße Ihr feedback (und vielleicht verpflichtet?)
Macht Sinn-Naja, beendete ich die erste Version der Wasserlinie Letzte Nacht, wenn Sie wollen überprüfen Sie es heraus: github.com/mikermcneil/waterline Es ist für die Verwendung dirtydb, eine in-memory-Datenbank. Mein nächste Schritt wird das erstellen einer mongodb-adapter, dann mySQL (der mySQL-adapter wird die mySQL-built-in-Transaktionen)
Ich weiß, es ist 2018, aber was könnte getan werden, wenn die Transaktion soll aus zwei oder mehr updates und einige nach dem ersten Ausfall?
InformationsquelleAutor mikermcneil