Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2011, 17h09   #1
Invité de passage
 
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 0
Points : 0
Par défaut Répartition d'une table sur plusieurs base de données

Bonjour,

Je suis en train de développer une grosse application web qui contiendra (je l'espère) des millions d'utilisateurs.

Cette application effectue beaucoup de requête sql par utilisateur donc je risque de vite me retrouver avec mon serveur qui a du mal.

J'ai donc décider de prendre 2 serveurs MySQL et de répartir mes utilisateurs sur l'un ou sur l'autre. Je pourrais faire du clustering mais le cout serveur serait trop élevé.

Je vais donc, lors de l'inscription d'un utilisateur faire cette inscription sur le serveur 1 ou sur le serveur 2.

Quelqu'un voit-il comment faire cela ? Comment pourrais-je géré la partie communautaire ?

Merci d'avance
jerome572 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 17h58   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Avant de commencer, pose toi la question du sizing: nombre d'utilisateur total, nombres d'utilisateurs connectés en même temps, nombre de requêtes par secondes etc.

Si le montant devient trop important, il se peut qu'un RDBMS (MySQL pour ne citer que celui là) ne convienne pas et il sera peut être intéressant de se tourner vers les moteurs de bases de données no-sql comme :
- Cassandra
- MongoDB
Qui sont beaucoup plus efficaces en stress que MySQL. Puisque tu parlais d'installer un cluster, sache que Cassandra à été taillé pour.

Si tu souhaite démarrer avec du MySQL (ce qui peut se comprendre, après tout Facebook à démarré sur une stack LAMP lui aussi) il existe des solutions pour optimiser la répartition du volume de données et optimiser les temps d'accès:
- L'usage du NDBcluster (que je te déconseille fortement)
- Les tables fédérées, chez nous on s'en sert pour la réplication
- Le partitionnement (qui peut être fait également dans l'optique de dispatcher les données sur plusieurs nodes d'un cluster).

Pour avoir manipulé les 3, le partitionnement reste la solution la plus simple et la plus efficace. Mais attention:
- Le partionnement ne peut être fait que sur des tables InnoDB, MyISAM ou NDBCluster
- Avec des tales NDBcluster, il ne peut y avor que n partitions où n est le nombre de nodes dans le cluster (d'autres limitation sont à prendre en compte dans ce cas)
- On ne peut partitionner que sur 2 niveaux
- La performance du partitionnement peut diviser par 5x les temps d'accès s'il est effectué correctement mais peut les multiplier par 2x s'il n'est pas correctement fait

En tout cas, ce n'est en aucune façon le rôle de PHP d'effectuer le load balancing, contrairement à ce que ton post laisse suggérer, c'est le cluster qui doit s'en charger.

Je ne te conseillerai jamais trop les outils de MySQL pour atteindre ce but:
- MySQL Workbench

Je te recommande également Lithium, un framework PHP destiné au sites à forte charge. Et je te recommande l'usage de Redis ou Memcached pour tout ce qui est cache mémoire afin de ne pas surcharger le SGBD (les deux sont supportés par Lithium).

Il est également possible de mettre un lion dans ton moteur PHP. Les projets suivants peuvent t'intéresser si le problème de performance devient trop important:
- Zend Server et son moteur d'opcodes optmimisé
- HipHop, créé par Facebook, permet de traduire du PHP en C++
- Quercus, permet de faire tourner PHP dans Java sur un serveur d'application tel que GlassFish
- Roadsend, compilateur PHP
- Phalanger, compilateur PHP pour .Net

Bon courage et n'oublie pas de nous faire part des tes retours d'expérience sur ces technologies.

N.B. On se serait pas croisés à l'IUT de Nice entre 2006 et 2009 ? Je crois me rappeller d'un certain Marc De Almeida, un parent à toi ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web