Question

Mon but est de créer un jeu de navigateur où les joueurs peuvent mettre en place des bâtiments.

Chaque bâtiment aura plusieurs modules (moteurs, bureaux, lignes de production, ...). Chaque module aura enentually une ou plusieurs actions en cours d'exécution, comme la création de 2OO 'élément X' avec des ingrédients Y, Z.

Le serveur de jeu sera mis en place avec Erlang: application Un OTP que le serveur lui-même, et de l'azote comme l'avant Web. J'ai besoin de la persistance des données. Je pensais à ce qui suit:

Quand quelqu'un ou quelque chose interagit avec un bâtiment, ou une minuterie représentant des extrémités de la ligne de production jusqu'à, un superviseur fraie un gen_server (sinon déjà donné naissance) qui charge l'état du bâtiment à partir d'une base de données, de sorte que le gen_server peut répondre à des messages comme 'ajouter ce module', 'commence cette action', 'stocker cette production à l'entrepôt', 'mourir', etc. (

Mais quand un bâtiment ne reçoivent pas de messages pendant X secondes ou minutes, il prendra fin (grâce à la fonction de temporisation de gen_server) et déposer le dos en cours d'état à la base de données.

Alors, comme il sera temps réel (soft) jeu, le gen_server doit être mis en place très rapidement. Je pensais membase que la base de données, car il est connu pour avoir très bon temps de réponse.

Ma question est: lorsqu'un serveur gen est en place un fonctionnement, ses états remplissages de la mémoire, et cet état est présent dans la mémoire traitée par membase aussi, donc l'utilisation de l'Etat deux fois sa taille en mémoire. Est-ce une mauvaise conception?

est MemBase une bonne solution à la persistance de la poignée dans mon cas? serait l'utilisation mnesia un meilleur choix, ou autre chose?

Je crains mnesia 2 Go (ou 4?) Limite de taille de la table parce que je ne sais pas au moment de la taille de l'état moyen de mes gen_servers (bâtiments dans cet exemple, butalso joueurs, des lignes de production, peu importe) et je peux avoir jour plus de 1 joueur:)

Merci

Était-ce utile?

La solution

Je suis d'accord avec Hynek -Pichi- Vychodil. Riak est une bonne chose pour le stockage clé valye.

Nous utilisons Riak près de 95% pour la même chose que vous avez décrit. Tout fonctionne jusqu'à présent sans aucun problème. Dans le cas où vous frapperez la limitation des performances de Riak - ajouter des nœuds et bon pour aller

Une autre chose est cool à propos de Riak sa très faible dégradation des performances au fil du temps. Vous pouvez trouver plus d'informations sur l'analyse comparative Riak ici: http: //joyeur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/

Dans le cas où vous allez avec elle:

A propos membase et utilisation de la mémoire: J'ai aussi essayé membase, mais je trouve qu'il ne convient pas à mes tâches - (membase déclare la tolérance aux pannes, mais je ne pouvais pas la configuration dans la façon dont il devrait fonctionner avec des défauts, même avec l'aide de gars memBase je ne réussissais pas). Donc, au moment où j'utilise l'architecture suivante: Tous les joueurs qui sont en ligne et jouer le jeu sont présentés en tant que joueur-processus (gen_server). Toutes les données de données et la logique métier pour chaque joueur est dans son lecteur processus. De temps en temps chaque desides joueur processus pour enregistrer son état dans Riak.

Alors semble loin d'être approche très rapide et efficace.

Mise à jour: Nous sommes maintenant avec PostgreSQL. Il est génial!

scroll top