|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() |
Bonjour,
Je ne savais pas trop où mettre ce message alors je l'ai mis ici car la question tourne pas mal autour du SGBD. Je développe actuellement une application web, et plus précisement un jeu en ligne. Pour cela, j'utilise les technologies suivantes : Apache/PHP5 côté serveur XHTML/JavaScript côté client PostGres 8 pour la base de donnée Mais je suis actuellement confronté à un problème. Dans ce jeu, je dois mettre à jour les ressources des joueurs, les déplacements, les constructions de bâtiments, les combats... Pour l'instant je fais tout ça côté PHP avec le système suivant : à chaque page, je regarde dans la base de donnée les différents élements à mettre à jour, je récupère la date de la dernière mise à jours de l'élement. Pour les ressources, je soustrais cette date de mise à jours à la date actuelle, je multiplie par un coefficient de production et j'ajoute les ressources gagnées dans la base de donnée. Pour les autres actions, je récupère la date de fin. SI elle est inférieur à la date actuelle, alors l'action est terminé et j'effectue les traitements nécessaires. Tous ces controles nécessitent beaucoup de ressources et sont éxecutés à chaque page par PHP. Je pense qu'il ne s'agisse pas de la meilleur solution, alors on a pensé à un système de démon. Une application (en java), s'occuperait de mettre à jour la base de donnée complète à intervalles réguliers. Cependant, il ne faut pas que ces intervalles excedent deux minutes. Le problème est qu'on a des tables relativement grande en lignes (généralement plusieurs dizaines de milliers d'enregistrements), mais pas trop en colonne (souvent entre 3 et 5 au maximum et ce sont des valeurs numériques, souvent entières). Donc il faut itérer sur les 10aine de milliers d'enregistrement, faire les controles et les traitements adéquats, tout ça en moins d'une minute. Est-ce possible ? Je n'ai pas trop d'idée d'ordre de grandeur pour les temps de traitements par les bases de donnnées. Que pensez-vous de ces solutions ? En avez-vous une autre ? Merci d'avance pour vos réponses. PS : j'ai oublié de préciser. En principe la base de donnée tournera sur un serveur bi-xeon et le serveur web (apache + PHP5) sur un second serveur bi-xeon. Mais il y a de fortes chances qu'on commence avec seulement un ou deux serveurs athlons. |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : février 2006 Messages : 118 ![]() |
Je ne pense pas être suffisament qualifié pour t'aider mais selon moi tu ne donnes pas assez d'information.
Combien de tables doivent être mises à jour pour enregistrer les données d'un joueur? Combien de joueurs jouent simultanément sur ce serveur? Le but j'imagine c'est que toutes les 2 minutes les actions d'un joueur soient mises à jour dans la base de données, il faut donc faire un tournus selon moi. Si t'as 100 joueurs par serveur ça signifie que tu as 100 mises à jour à effectuer en 2 minutes soit 1.2 secondes par mise à jour. Je pense que si ton système est conçu efficacement tu dois pouvoir réussir mais je n'ai jamais fait ce genre de trucs, ni en Java ni dans tout autres langages. Cela dit j'ai pas l'impression que PHP ait été destiné à ce genre d'usage côté serveur, java me semble plus adapté. J'ai pas de temps de traitement très concret à te donner mais un insert/update/delete avec des index ça prend nettement moins d'1 sec même si la table contient des dizaines de milliers de lignes je crois. Je te conseille de faire des tests de mises à jour directement sur la base de données et tu peux afficher les temps d'exécution. |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Il est impossible de répondre à ta question sans une étude de la structure de la base et des transactions qui doivent opérer.
L'optimum en terme de performances est assuré avec : - une modélisation NICKEL de la base (respect des formes normales, choix des types appropriés) - un niveau de traitement proche de l'objet ce qui ne peut se faire qu'exclusivement au travers de procédures stockées et donc aucune requête directe depuis les pages web. Mon expérience en terme d'audit et de tunning (plus de 10 ans maintenant) montre que les gains possible le sont : 60 à 70 % au niveau du modèle de données 20 % au niveau de la structure de la base (fichiers, index...) le reste dans l'écriture des requêtes et le paramétrage du serveur. Il faut donc faire une étude... A ta dispo. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com