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

Come devo progettare il mio server DB e API per un gioco da tavolo per iPhone multiplayer a turni? (pensando a nodejs, mongo, couch, ecc.)

Prima di tutto, Nodejs è fantastico per scrivere proxy TCP inversi su database NoSQL. Potresti lasciare passare tutti i comandi standard ma alterare/estendere le loro API con la tua magia, ad es. facendo in modo che MongoDB parli HTTP o CouchDB parli un protocollo binario su socket.

Quando si tratta di scegliere una soluzione NoSQL per archiviare pezzi di giochi da tavolo e monitorare le mosse dei giocatori, penso che Redis e CouchDB siano i migliori candidati.

  1. CouchDB. È veloce, affidabile e può gestire molte connessioni HTTP simultanee. Probabilmente è l'opzione migliore perché, a differenza di Redis, può trasmettere un messaggio quando un documento cambia. L'API a modifiche continue rende super semplice per te avere l'app di ogni giocatore per monitorare le modifiche alla loro scheda. La richiesta potrebbe essere simile a:

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

    Ogni client riceverà un oggetto JSON per riga nella risposta ogni volta che viene modificato un documento pertinente. (E una nuova riga vuota ogni 1000 ms come una sorta di keep-alive.)

  2. Redis. Utilizza un semplice protocollo basato su linea (come MemcacheD++) per parlare su un socket e consente di memorizzare elenchi, insiemi, hash con valori arbitrari, anche binari. È molto veloce perché tutto accade in memoria ma viene mantenuto sul disco in modo asincrono. Ma soprattutto dovresti valutarlo perché ha già PubSub notifiche integrate. Tieni presente che dovrai pubblicare esplicitamente le notifiche di spostamento su un canale condiviso dai giocatori perché Redis non pubblicherà automaticamente quando una chiave/valore cambia.

Dal momento che MongoDB non ha un meccanismo per osservare i cambiamenti mentre accadono o fare pubsub, non lo considero una buona opzione, anche se con uno sforzo extra potresti farlo funzionare.

Quindi, per concludere, potresti essere in grado di sostituire "il grande stack LAMP" con CouchDB da solo, Redis da solo o uno posizionato dietro un'app nodo per filtrare/estendere le API che già forniscono in qualcosa che si adatta al tuo gioco.

In bocca al lupo!