sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan skal jeg bygge min DB- og API-server til et turbaseret iPhone-brætspil med flere spillere? (tænker på nodejs, mongo, sofa osv.)

Først og fremmest er Nodejs fantastisk til at skrive omvendte TCP-proxyer til NoSQL-databaser. Du kan lade alle standardkommandoer passere igennem, men ændre/udvide deres API'er med din egen magi, f.eks. få MongoDB til at tale HTTP eller CouchDB til at tale en binær protokol over sockets.

Når det kommer til at vælge en NoSQL-løsning til opbevaring af brætspilsbrikker og overvågning af spillerbevægelser, tror jeg, at enten Redis og CouchDB er de bedste kandidater.

  1. CouchDB. Det er hurtigt, pålideligt og kan håndtere en masse samtidige HTTP-forbindelser. Det er nok den bedste mulighed, fordi den i modsætning til Redis kan udsende en besked, når et dokument ændres. kontinuerlige ændringer API gør det super enkelt for dig at få hver spillers app til at overvåge ændringer på deres board. Anmodningen kan se sådan ud:

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

    Hver klient vil modtage et JSON-objekt pr. linje i svaret, hver gang et relevant dokument ændres. (Og en tom ny linje hver 1000 ms som en slags keepalive.)

  2. Redis. Den bruger en simpel linjebaseret protokol (som MemcacheD++) til at tale over en socket og giver dig mulighed for at gemme lister, sæt, hashes med vilkårlige - endda binære - værdier. Det er meget hurtigt, fordi alt sker i hukommelsen, men fortsættes til disk asynkront. Men mest af alt bør du vurdere det, fordi det allerede har PubSub notifikationer bagt ind. Bemærk, at du eksplicit skal offentliggøre flyttenotifikationer over en kanal, som spillerne deler, fordi Redis ikke automatisk udgiver, når en nøgle/værdi ændres.

Da MongoDB ikke har en mekanisme til at observere ændringer, efterhånden som de sker, eller at lave pubsub, anser jeg det ikke for en god mulighed, selvom du med ekstra indsats kunne få det til at fungere.

Så for at konkludere, kan du muligvis erstatte "den store LAMP-stak" med CouchDB alene, Redis alene, eller enten en, der er placeret bag en node-app til filtrering/udvidelse af de API'er, de allerede leverer, til noget, der passer til dit spil.

Held og lykke!



  1. mongo:afkastet svarer ikke til antal()

  2. Opdater indlejret array-element i mongodb

  3. Hvordan udfører jeg mongodump-kommandoen programmatisk fra node.js?

  4. Hvordan fjerner du duplikerede poster fra et array?