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

Wie soll ich meinen DB- und API-Server für ein rundenbasiertes Mehrspieler-Brettspiel für das iPhone gestalten? (Denken Sie an Nodejs, Mongo, Couch usw.)

Zunächst einmal eignet sich Nodejs hervorragend zum Schreiben von Reverse-TCP-Proxys in NoSQL-Datenbanken. Sie könnten alle Standardbefehle passieren lassen, aber ihre APIs mit Ihrer eigenen Magie ändern/erweitern, z. MongoDB dazu bringen, HTTP oder CouchDB ein binäres Protokoll über Sockets sprechen zu lassen.

Wenn es um die Wahl einer NoSQL-Lösung zum Speichern von Brettspielfiguren und zum Überwachen von Spielerbewegungen geht, sind meiner Meinung nach entweder Redis und CouchDB die besten Kandidaten.

  1. CouchDB. Es ist schnell, zuverlässig und kann viele gleichzeitige HTTP-Verbindungen verarbeiten. Es ist wahrscheinlich die beste Option, da es im Gegensatz zu Redis eine Nachricht senden kann, wenn sich ein Dokument ändert. Die API für kontinuierliche Änderungen macht es Ihnen super einfach, die App jedes Spielers auf Änderungen an seinem Board zu überwachen. Die Anfrage könnte so aussehen:

    curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000

    Jeder Client erhält jedes Mal ein JSON-Objekt pro Zeile in der Antwort, wenn ein entsprechendes Dokument geändert wird. (Und ein leerer Zeilenumbruch alle 1000 ms als eine Art Keep-Alive.)

  2. Redis. Es verwendet ein einfaches zeilenbasiertes Protokoll (wie MemcacheD++), um über einen Socket zu kommunizieren, und ermöglicht es Ihnen, Listen, Sets, Hashes mit beliebigen – sogar binären – Werten zu speichern. Es ist sehr schnell, da alles im Arbeitsspeicher passiert, aber asynchron auf der Festplatte gespeichert wird. Aber vor allem sollten Sie es bewerten, weil es bereits PubSub hat Benachrichtigungen eingebrannt. Beachten Sie, dass Sie Bewegungsbenachrichtigungen explizit über einen Kanal veröffentlichen müssen, den die Spieler teilen, da Redis nicht automatisch veröffentlicht, wenn sich ein Schlüssel/Wert ändert.

Da MongoDB keinen Mechanismus zum Beobachten von Änderungen während des Geschehens oder zum Ausführen von Pubsub hat, halte ich dies für keine gute Option, obwohl Sie es mit zusätzlichem Aufwand zum Laufen bringen könnten.

Abschließend können Sie den „großen LAMP-Stack“ möglicherweise durch CouchDB allein, Redis allein oder einen hinter einer Node-App zum Filtern/Erweitern der bereits bereitgestellten APIs in etwas ersetzen, das zu Ihrem Spiel passt.

Viel Glück!