2009-11-12 12 views
2

Salut les gars j'ai besoin de votre opinion.Je suis dans une situation où j'ai besoin d'utiliser ajax donc j'ai besoin d'interroger les informations des utilisateurs toutes les 30 secondes ..... qui est plus efficace d'interroger le serveur un fichier texte d'abord) et s'il y a une mise à jour pour une information utilisateur, faites une requête de base de données complète ou interrogez directement la base de données directement toutes les 30 secondes.Veuillez expliquer votre raisonnement afin que je puisse peser ma décision ...... .Merci d'avance.Serveur ou base de données

Répondre

0

dépend du nombre d'utilisateurs dont vous disposez, mais effectuer une opération d'interrogation ne sera pas forcément échelonné.

Vous devriez jeter un oeil à l'architecture comet. Vous devriez coder un middleware qui ne parlerait à la base de données qu'en cas de besoin et ferait beaucoup de choses en mémoire ou sur un fichier plat. Le middle ware ferait une mise en cache entre votre frontend (serveur web) et le backend réel (base de données).

Je vous conseille également de regarder dans memcachedb (ou toute clé/valeur DB engine) pour coder votre middleware.

Si vous n'avez pas trop d'utilisateurs, vous pouvez conserver un schéma d'interrogation.

4

Je mettrais en cache sur le serveur Web une durée de vie de 30 secondes et récupérais toutes les données utilisateur pour minimiser les allers-retours à la base de données. Je voudrais également que le client utilise le cache web, pas aller à la base de données.

Il est beaucoup de frais généraux pour un gain minime sinon

+0

+1 pour GET conditionnel – Piskvor

4

Si vous avez un petit nombre d'utilisateurs et quelques clients Web, puis mettre en œuvre la solution la plus simple. Raisonnement: Il n'est pas nécessaire d'optimiser quelque chose comme ceci, sauf si vous avez de graves problèmes de performance. Je commence à penser à cela si:

  • Il y a des milliers d'utilisateurs dans le DB
  • Cette information a été requêtes chaque seconde par des centaines de clients Web

Mais si vous avez 10 utilisateurs, alors cela se traduit probablement par 10 navigateurs Web demandant cette information toutes les 30 secondes. Vous devriez vous soucier de la CPU pauvres sur vos serveurs, car il va se ennuyer à mort;)

+0

+1 pour KISS ..... –

1

Je voudrais première mesure si la version simplifiée (semble base de données interroger directement en premier) n'est pas assez bon . Puis, si cela ne suffit pas, cherchez une meilleure solution (toujours en mesurant les résultats).

Il y a beaucoup à ifs et dépend de vous donner de bons conseils à distance.

0

Je ne suis pas sûr d'avoir besoin de la mise en cache, mais peut-être que je suis naïf? Comment le cache sait-il si les données ont changé ou non?

 
SELECT ... lots of columns 
FROM MyTable 
WHERE UserID = 1234 
     AND LastUpdated > @MyLastUpdated 

va seulement faire un travail sérieux lorsque l'ET est vrai? Si vous obtenez zéro lignes, il n'a pas changé - ou UserID = 1234 n'existe plus, mais si vous avez besoin de savoir que la requête pourrait être modifiée pour retourner cela aussi).Ainsi, je ne pense pas qu'il soit nécessaire de faire une requête "Has UserID = 1234 changed since @MyLastUpdated" suivie d'un SELECT * complet.

Si vous récupérez la valeur de LastUpdated dans la liste des colonnes, stockez-la, puis elle est disponible en tant que paramètre lors de la prochaine vérification si UserID = 1234 a changé. (LastUpdated n'est pas la dernière fois que vous avez vérifié, mais le moment où l'enregistrement a été mis à jour pour la dernière fois, mais il doit être créé par la même horloge à chaque fois, en dehors du PC du client !!), et en tenant compte de ce qui se passe avec l'heure d'été à l'automne.)

Questions connexes