sql >> Database >  >> NoSQL >> MongoDB

Hoe moet ik mijn DB &API-server ontwerpen voor een turn-based multiplayer iPhone-bordspel? (denk aan nodejs, mongo, bank, enz.)

Allereerst is Nodejs geweldig voor het schrijven van reverse TCP-proxy's naar NoSQL-databases. Je zou alle standaardcommando's kunnen laten passeren, maar hun API's kunnen wijzigen/uitbreiden met je eigen magie, b.v. MongoDB laten spreken HTTP of CouchDB spreken een binair protocol over sockets.

Als het gaat om het kiezen van een NoSQL-oplossing voor het opslaan van bordspelstukken en het bewaken van spelerbewegingen, denk ik dat Redis en CouchDB de beste kandidaten zijn.

  1. CouchDB. Het is snel, betrouwbaar en kan veel gelijktijdige HTTP-verbindingen aan. Het is waarschijnlijk de beste optie omdat het, in tegenstelling tot Redis, een bericht kan uitzenden wanneer een document verandert. De API voor continue wijzigingen maakt het supereenvoudig voor u om de app van elke speler te laten controleren op wijzigingen aan hun bord. Het verzoek kan er als volgt uitzien:

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

    Elke klant ontvangt een JSON-object per regel in het antwoord wanneer een relevant document wordt gewijzigd. (En elke 1000 ms een lege nieuwe regel als een soort keepalive.)

  2. Opnieuw. Het gebruikt een eenvoudig lijngebaseerd protocol (zoals MemcacheD++) om over een socket te praten en stelt je in staat om lijsten, sets, hashes op te slaan met willekeurige - zelfs binaire - waarden. Het is erg snel omdat alles in het geheugen gebeurt, maar asynchroon op de schijf wordt bewaard. Maar je moet het vooral evalueren omdat het al PubSub heeft meldingen ingebakken. Houd er rekening mee dat je verplaatsingsmeldingen expliciet moet publiceren via een kanaal dat de spelers delen, omdat Redis niet automatisch publiceert wanneer een sleutel/waarde verandert.

Aangezien MongoDB geen mechanisme heeft om veranderingen waar te nemen wanneer ze gebeuren of pubsub te doen, beschouw ik het niet als een goede optie, hoewel je met extra moeite het zou kunnen laten werken.

Dus om af te sluiten, je kunt misschien "de grote LAMP-stack" vervangen door alleen CouchDB, alleen Redis, of een die achter een node-app is geplaatst om de API's die ze al bieden te filteren/uit te breiden tot iets dat bij je spel past.

Veel succes!



  1. Prestatievergelijking van het gebruik van Redis-hashes versus veel sleutels

  2. MongoDB:Indexen-volgorde en zoekvolgorde moeten overeenkomen?

  3. Waarom krijg ik een InvalidDocument-uitzondering wanneer ik voor de eerste keer een object opslaat in MongoDB in Django?

  4. Hoe deel te nemen aan twee collecties in mangoest