2010-08-28 5 views
3

Existe-t-il une différence entre les sites CMS et les sites à trafic élevé (comme les portails d'information) en logique et en conception et optimisation de base de données (PHP et MySQL)? J'ai cherché php site scalability dans stackoverflow et memcached est en majorité. Y at-il des techniques pour l'optimisation de MySQL? (Je cherche un livre pour cette question J'ai cherché dans amazon mais je ne sais pas quel est le meilleur choix.) Merci d'avanceCMS et sites à fort trafic: PHP et MySQL

+0

Quelle est votre question, en particulier? –

+0

En général, les options d'optimisation pour un CMS sont plus restreintes, mais l'idée est la même. – arthurprs

+0

Que voulez-vous dire par "trafic élevé"? Quelque chose comme Google News utiliserait une architecture de base de données différente (pas de MySQL), mais tout dépend de combien de données, combien de trafic, le but de l'application, etc. – bjudson

Répondre

3

ce n'est pas si facile de répondre. Il existe différentes approches et une variété d'opinions, mais il est difficile de couvrir certains scénarios courants. mais d'abord quelques bases.

La plupart des applications Web peuvent être créées dans l'application et la base de données. l'utilisation de la base de données peut être séparée en transaction (oltp) et analytique (olap)

Dans le meilleur des cas, vous pouvez démarrer un certain nombre de serveurs d'applications et répartir le trafic entre eux. ils ont tous une connexion au même serveur de base de données et peuvent travailler indépendamment. cela peut être cependant difficile si vous avez d'autres données partagées, des sessions etc. vous pouvez accomplir cela en ajoutant simplement plusieurs adresses ip à votre nom de domaine en DNS. ou vous utilisez des techniques d'équilibrage de charge pour transférer les clients à différents serveurs.

La mise à l'échelle de l'application est généralement très facile. base de données est beaucoup plus complexe. La première chose à faire est de configurer un ou plusieurs serveurs de réplication ayant les mêmes données que la base de données principale. ils peuvent être cascadés mais ont un inconvénient séreux. leurs données ne sont pas toujours à jour. en général pas plus de quelques secondes mais il peut être plus sous charge. mais pour de nombreux cas d'utilisation, c'est bien. les grands sites qui affichent simplement des informations pourraient simplement répliquer leur base de données sur certains serveurs esclaves, configurer certains serveurs d'application (c'est une bonne habitude d'exécuter un serveur esclave et un serveur d'application sur le même serveur) tout va bien. Chaque requête OLAP peut être dirigée vers un esclave. Olap Querys sont ceux qui ne modifient rien et n'ont pas besoin de 100% jusqu'à 2 données de date. Donc tout doit être écrit sur le même serveur source de base de données à partir duquel tous les autres serveurs obtiennent sa copie. par exemple chaque commentaire pour un article.

Si ce goulot d'étranglement est trop serré, vous pouvez aller dans deux directions.

  1. sharding
  2. réplication maître-maître

sharding signifie que vous décidez sur le serveur d'applications où stocker et où chercher vos données. par exemple, chaque commentaire qui commence par a va au serveur a, b-> b et ainsi de suite. c'est un exemple stupide mais c'est fondamentalement comment c'est. la plupart du temps, certains identifiants internes sont impliqués. si possible son bon pour les données de fragmentation afin qu'il puisse être complètement tiré de ce serveur agani. dans l'exemple ci-dessus, si je voulais avoir tous les commentaires pour un article, je devrais demander à eveyr serveur a-z et fusionner les résultats. c'est inefficace mais possible, car ces serveurs peuvent être répliqués. C'est ce qu'on appelle la cartographie (vous pouvez vérifier le fameux algorithme google map-reduce qui, fondamentalement, fait juste cela). La réplication maître-maître signifie que vous écrivez vos données sur différents serveurs maîtres et qu'elles se synchronisent entre elles, et ne sont pas stockées séparément comme si vous faisiez du sharding. cela doit être fait si votre application n'est pas capable de décider elle-même où stocker et récupérer les données. vous juste stockez à un serveur maître, chaque serveur obtient tout et tout le monde est heureux? non ... car cela implique un autre problème sérieux. conflits! Imaginez deux utilisateurs entrer un commentaire. commentA est stocké sur serverA, commentB est stocké sur serverB. quel identifiant devrions-nous utiliser. lequel vient en premier? Le meilleur est de concevoir une application qui évite ces cas et a différentes clés et d'autres choses. mais ce qui se passe habituellement, c'est la résolution des conflits, la priorisation et d'autres choses. Oracle a beaucoup de fonctionnalités à ce niveau et mysql est toujours derrière. mais les tendances vont dans des structes de données beaucoup plus complexes comme les nuages ​​anaway ...

bien je ne pense pas que j'ai bien expliqué mais vous devriez au moins obtenir quelques mots-clés du texte que oyu peut étudier plus loin.

+1

Merci beaucoup pour la bonne réponse. Pouvez-vous suggérer une ressource pour ce problème? – TheNone

+0

Assurez-vous que mon explication, surtout en ce qui concerne la réplication du master master, est très mauvaise, je vais chercher de bonnes ressources et les ajouter –

1

Bien sûr, il y a toutes sortes de choses que vous pouvez faire pour optimiser votre PHP/Applications Web MySQL pour les sites Web à fort trafic. Cependant, la plupart d'entre elles dépendent de votre situation spécifique, que vous n'avez pas mentionnée dans votre question.

Votre base de données doit être bien structurée, que vous ayez ou non un site très fréquenté. Si vous utilisez un CMS sur étagère, c'est généralement bien. Mis à part une bonne architecture d'application, il n'y a pas de solution unique.