IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Répartition d'une table sur plusieurs base de données


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 23
    Points : 11
    Points
    11
    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

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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 ?

Discussions similaires

  1. [MySQL] Recupérations de tables sur plusieurs bases
    Par Tlams dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/10/2010, 16h36
  2. requete pour diviser une table sur plusieurs tables
    Par futurist dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/09/2008, 22h51
  3. Réponses: 4
    Dernier message: 11/01/2008, 12h18
  4. Une requete sur plusieurs base
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 06/10/2006, 16h11
  5. [Access] Trier une table sur plusieurs critères
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/05/2006, 19h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo