MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment dois-je concevoir mon serveur DB &API pour un jeu de société iPhone multijoueur au tour par tour ? (en pensant à nodejs, mongo, canapé, etc.)

Tout d'abord, Nodejs est génial pour écrire des proxys TCP inverses dans des bases de données NoSQL. Vous pouvez laisser passer toutes les commandes standard mais modifier/étendre leurs API avec votre propre magie, par ex. faire parler MongoDB HTTP ou CouchDB parler un protocole binaire sur les sockets.

Lorsqu'il s'agit de choisir une solution NoSQL pour stocker des pièces de jeu de société et surveiller les mouvements des joueurs, je pense que Redis et CouchDB sont les meilleurs candidats.

  1. CouchDB. Il est rapide, fiable et peut gérer de nombreuses connexions HTTP simultanées. C'est probablement la meilleure option car contrairement à Redis, il peut diffuser un message lorsqu'un document change. L'API de modifications continues rend super simple pour vous d'avoir l'application de chaque joueur surveillant les changements apportés à leur tableau. La requête peut ressembler à :

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

    Chaque client recevra un objet JSON par ligne dans la réponse chaque fois qu'un document pertinent est modifié. (Et une nouvelle ligne vide toutes les 1000 ms comme une sorte de keepalive.)

  2. Redis. Il utilise un protocole simple basé sur des lignes (comme MemcacheD++) pour parler via un socket et vous permet de stocker des listes, des ensembles et des hachages avec des valeurs arbitraires, voire binaires. C'est très rapide car tout se passe en mémoire mais est conservé sur le disque de manière asynchrone. Mais surtout, vous devriez l'évaluer car il a déjà PubSub notifications intégrées. Notez que vous devrez publier explicitement les notifications de mouvement sur un canal partagé par les joueurs, car Redis ne publiera pas automatiquement lorsqu'une clé/valeur change.

Étant donné que MongoDB n'a pas de mécanisme pour observer les changements au fur et à mesure qu'ils se produisent ou faire du pubsub, je ne le considère pas comme une bonne option, bien qu'avec un effort supplémentaire, vous puissiez le faire fonctionner.

Donc, pour conclure, vous pourrez peut-être remplacer "la grande pile LAMP" par CouchDB seul, Redis seul, ou l'un ou l'autre placé derrière une application de nœud pour filtrer/étendre les API qu'ils fournissent déjà en quelque chose qui correspond à votre jeu.

Bonne chance !