2010-01-06 8 views
2

Je travaille actuellement sur un jeu, et j'ai commencé à charger et à sauvegarder.MySQL - Sauvegarde et chargement

Je pensais, mais je ne peux vraiment pas décider, car je ne suis pas sûr de ce qui serait le plus efficace.

Ma première option: Lorsqu'un utilisateur s'enregistre, seul l'enregistrement est inséré (dans le tableau des 'caractères'). Lorsque l'utilisateur essaie de se connecter, et après qu'il l'a fait avec succès, le serveur essaiera de charger toutes les informations de l'utilisateur (qui est séparé entre plusieurs tables, et se combine via mysql 'LEFT JOIN'), il fonctionnera bien Toutes les informations dont il dispose et les appliquent à l'instance d'entité, s'il s'exécute en NULL (ce qui signifie que les informations ne sont pas encore dans la base de données), il utilisera automatiquement une valeur par défaut. Lors de la sauvegarde, il va insérer ou mettre à jour, de sorte que tous les défauts qui ont été générés lors du chargement seront enregistrés maintenant.

Ma deuxième option: Insérez simplement toutes les lignes requises lors de l'inscription (les lignes sont insérées à partir du site Web lorsque l'inscription est terminée).

Les inconvénients de la première option: vérifications inutiles si l'utilisateur s'est déjà connecté une fois, puisque toutes les tables seront générées après la première connexion. Upsides à la première option: si des enregistrements de tables sont supprimés, les données par défaut seraient insérées au lieu de désactiver le lecteur, indiquant que les informations sur les caractères sont endommagées/perdues. Les inconvénients à la deuxième option: il pourrait perdre un peu de mémoire, puisque toutes les tables sont insérées à l'enregistrement, et il pourrait y avoir des robots de spam, et des gens qui ne parviennent même pas à se connecter.

Upsides à la première option: Nous n'avons rien à vérifier sur le serveur.

J'ai également noté que la première option peut bousiller tous les systèmes de recherche (via admincp, si nous essayons de chercher un utilisateur spécifique).

+0

Pourriez-vous fournir des détails sur le type d'information dont vous parlez? Quelles sortes de données proviennent de ces autres tables? – ErikE

Répondre

7

Je voudrais aller avec la deuxième option, ajouter des lignes par défaut à votre compte d'utilisateur, et signaler la table de l'utilisateur principal comme incomplète. Cela maintiendra l'intégrité des données dans votre base de données, alors que chaque enregistrement d'utilisateur est complet dans son intégralité. Si vous devez supprimer l'enregistrement, vous pouvez simplement ajouter un script de suppression en cascade pour nettoyer la maison.

En outre, je ne développerais pas votre schéma de données basé sur des robots malins créant des comptes. Si l'intégrité de vos comptes utilisateur vous préoccupe, ajoutez une sorte de validation des données dans votre solution ou un script de nettoyage automatisé pour effacer les comptes incomplets dès lors qu'ils répondent à certains critères, à savoir la date de création d'un certain seuil.

+0

L'autre avantage est que vous n'avez pas besoin de vous soucier des enregistrements manquants dans le reste de votre code. Avec la première approche, vous risquez d'avoir des cas spéciaux partout. –

0

Vous indiquez qu'il existe plusieurs tables de données pour chaque utilisateur, certaines pouvant avoir une valeur par défaut s'il n'existe pas dans la table. Je suppose que cela est configuré comme une table principale "caractères", avec nom d'utilisateur, mot de passe et email, et une table séparée pour quelque chose comme "raccourcis favoris autour du site", et s'ils n'ont pas spécifié de préférences personnelles, Ensuite, la question devient lors de l'inscription, si une copie explicite des raccourcis favoris est ajoutée par défaut pour cet utilisateur ou si la valeur NULL est utilisée. par défaut à une liste par défaut?

Je dirais que cela dépend de la nature des tables de données auxiliaires; spécifiquement la valeur par défaut pour ces tables. À quelle fréquence les valeurs par défaut changeraient-elles?Si la valeur par défaut change souvent, une configuration comme votre première option résulterait en ce que les utilisateurs ayant seulement une entrée «basique» recevraient fréquemment de nouvelles données auxiliaires, tandis que ceux qui spécifieraient leurs propres entrées conserveraient leurs préférences. En utilisant votre seconde option, si la valeur par défaut a changé, afin de garder les utilisateurs à jour, une recherche/remplacement devrait être fait pour changer les entrées qui étaient l'ancienne par défaut à la nouvelle valeur par défaut.

L'autre suggestion est de revoir la structure de votre base de données. Vous ne mentionnez pas que votre disposition de table actuelle est gravée dans la pierre; existe-t-il un moyen de ne pas avoir toutes les tables LEFT JOIN et d'avoir une seule table 'characters'?

Questions connexes