2010-12-10 5 views
5

Je me demandais quel genre d'avantages une option NoSQL pourrait avoir soit à la place, ou en association avec un SGBDR pour un MMORPG typique. En particulier, je suis curieux de savoir comment l'intégrité des données est préservée sous nosql.l'option NoSQL pour MMORPGs

Je vais vous donner quelques exemples où je suis un peu confus quant à la façon dont la logique du serveur fonctionnerait:

Scénario 1: Disons que le joueur A et B attaque le joueur C en même temps. Un player_stats.kill_count est mis à jour pour ne importe quel joueur tue le joueur C. Normalement, on peut gérer cette AttackPlayerRequest de la manière suivante:

begin transaction { attacker.health = newAttackerHealth

defender.health = newDefenderHealth

si defender.Health == 0 { attacker.stats.kills + = 1 }}

Scénario 2: Le joueur A se lls un objet à un fournisseur NPC, et tente rapidement de déposer le même élément de leur inventaire sur le terrain. (Même si vous n'êtes pas autorisé à l'interface utilisateur, ils peuvent certainement mettre les événements sur le fil).

Cette liste continue évidemment et affecte à peu près toutes les interactions joueur-joueur-joueur-monde. Un dernier élément d'information est que le serveur est threadé car nous ne voulons pas de requête particulièrement longue pour empêcher les autres joueurs de faire des choses simples dans le jeu.

Je pense que ma grande question est ici, je comprends mal quelque chose NoSQL dans laquelle ce un problème trivial? Si non, est-ce au-delà du domaine de ce que les options nosql sont destinées à résoudre? Sous un MMO typique, où pourrait-on injecter des options nosql pour augmenter les performances du serveur?

+1

Vous pourriez obtenir une meilleure réponse sur: http://gamedev.stackexchange.com/ puisque votre question est liée au développement de jeux. – HoLyVieR

+0

La plupart des systèmes NoSQL ne prennent pas en charge les transactions. Avez-vous besoin d'eux? – TTT

+0

Je ne pense pas qu'il existe des systèmes NoSQL qui ont des fonctionnalités pour l'intégrité des données. C'est quelque chose qui doit être fait dans l'application. Cependant, comme le groupe NoSQL est un groupe très diversifié, il existe peut-être une exception à cette règle générale. – TTT

Répondre

2

Je pense que les serveurs MMO feraient beaucoup de choses que vous avez listées en mémoire. Je ne pense pas qu'ils vident tous ces éléments dans la base de données. Je pense que des événements plus durs, comme la réception d'un nouvel équipement ou la modification de la disposition de votre équipement, seraient sauvés.

C'est beaucoup de données, mais pas autant que chaque interaction de combat.

0

À ma connaissance, la technologie NoSQL est quelque chose que vous utiliseriez dans un contexte de traitement par lots, et non dans un contexte temps réel. En fait, l'implémentation H-base open source se trouve au-dessus du système de fichiers distribués hadoop (hdfs), qui est principalement utilisé pour les situations en lecture seule.

L'idée est que vous cherchez 'un dossier par itérer sur l'ensemble des données que vous définissez sont en gardant « sur le disque » (sur un système de fichiers distribué en fait). Pour les ensembles de données petascale, il est impossible de garder les choses en mémoire, de sorte que vous utilisez des quantités massives de lectures de disque pour être en mesure de «rechercher» les données du tout. La nature distribuée assure (ou facilite) que cela se produise en temps opportun.

Le principe est que vous apportez le traitement des données distribuées, au lieu de tirer des données à partir d'une base de données très importante, l'envoyer sur le réseau et traiter ensuite sur un nœud local. Pig (http://pig.apache.org/) et Hive (http://hive.apache.org/) sont des interfaces au-dessus de hdfs, qui permettent des requêtes de type SQL, mais en arrière-plan, ils utilisent mapreduce emplois. L'interaction est lente, mais ce n'est pas le point. Le fait est que l'immense ensemble de données peut être traité du tout.

Pour le jeu, ce n'est évidemment pas le chemin à parcourir.Vous vous attendez donc à ce que les données soient extraites du système de fichiers distribué, mises en cache sur un serveur et utilisées pendant une session. Une fois le jeu terminé, toutes les données seront renvoyées à l'ensemble de données. (Au moins, c'est comme ça que j'imagine que ça irait).

Les ensembles de données Hdfs sont principalement traités à un certain moment, après quoi les résultats sont publiés dans un lot. Par exemple, dans un site de réseau social, vous compilez toutes les données de connexion quotidiennement, recherchez toutes les nouvelles connexions entre les personnes et lorsque l'opération est terminée pour toutes les personnes dans l'ensemble de données, les résultats sont publiés dans le fichier standard. 'X est maintenant connecté aux messages Y'. Cela n'arrive pas en temps réel.

+0

Vous utilisez Hadoop et HBase en effet pour le traitement par lots, mais NoSQL est un groupe diversifié. Par exemple MongoDb est plus un système OLTP mais sans transactions, donc OLP. Voici une liste de cas d'utilisation pour NoSQL db: http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html – TTT

4

Tout dépend de la façon dont votre jeu fonctionne.

NoSQL

Farmville sur facebook utilise NoSQL. Farmville agit comme un serveur énorme que tout le monde est sur. Disons que Farmville utilise 3 ordinateurs dans son cluster de base de données. Ordinateur 1 à San Diego. Ordinateur 2 à New York. Ordinateur 3 à Moscou. Je me connecte à Facebook de San Diego alors je se connecter à la base de données ici. Je me lève et je me déconnecte. Éventuellement, l'ordinateur 1 indiquera à l'ordinateur 2 et 3 comment j'ai été mis à niveau, mais il pourrait s'écouler jusqu'à une heure avant que quelqu'un en Russie ne voit ces changements sur mon compte.

La mise à l'échelle de NoSQL est aussi simple que d'ajouter un autre ordinateur au cluster et d'indiquer au site Web de cette région d'utiliser cet ordinateur.

SQL

Il existe plusieurs méthodes de faire du travail SQL, mais je vais vous expliquer une façon de le rendre semblable à NoSQL

Chaque centre de données dispose de 10 serveurs de jeu, chacune avec son propre SQL Base de données + 1 base de données secondaire. La base de données Sub Master a partagé les informations entre les 10 serveurs, donc si vous vous connectez au serveur 1 et faites le personnage John Doe, puis déconnectez-vous, le serveur 10 aura votre personnage si vous vous connectez à ce serveur. Sub Master puis partage ses informations avec le serveur maître à votre QG. Le serveur maître partagera ensuite John Doe avec tous les autres sous-maîtres dans tous les autres centres de données, et ces sous-maîtres mettront à jour leurs serveurs de jeu. Cette configuration vous permettrait de vous connecter au serveur Weed à San Francisco, de jouer votre personnage, de vous déconnecter, de vous connecter sur le serveur Vodka à Moscou, et de toujours voir votre personnage.

Des jeux comme World of Warcraft utilisent SQL, mais seules certaines parties de la base de données sont partagées. Cela permet de réduire la taille de la base de données sur chaque ordinateur et de réduire les besoins en matériel. En situation réelle, chaque sous-maître disposerait d'un sous-maître secondaire, et votre serveur maître disposerait de quelques serveurs de sauvegarde dans le cas où un serveur tomberait en panne sur l'ensemble de votre réseau.

1

Les MMORPG qui s'inquiètent de la latence s'exécutent généralement sur un seul serveur et stockent tout sauf les informations de modèle objet dans la RAM. Tout ce qui concerne les environnements de combat est préoccupé par la latence. Tout ce qui utilise un disque dur, que ce soit un SGBDR ou un NoSQL, est une mauvaise idée dans les environnements de combat. Mettre à jour et partager la personnalisation, la position, le vecteur de mouvement, le vecteur d'orientation, la santé, la puissance, etc ... entre 10 000 utilisateurs sur un seul serveur via un mécanisme utilisant HHD est idiot si vous êtes inquiet de la latence. Même si vous avez 2 personnes qui se battent dans une arène simple, la latence est toujours un problème et vous devriez courir sur un seul serveur et garder tout en mémoire.Tout ce qui sera rendu devrait être sur votre PC ou dans la mémoire de votre PC.

MMORPGs qui ne sont pas préoccupés par la latence peut fonctionner sur plusieurs serveurs et une base de données que vous souhaitez (NoSQL, MySQL, etc ...)

Si vous faites un jeu comme Farmville ou Neopets, alors oui, NoSQL ou MySQL deviennent des options valides.