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 :

Appel répétée à une mini page : optimisation


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut Appel répétée à une mini page : optimisation
    Bonjour,

    Je suis amené à créer une page php de quelques lignes qui sera appelé en moyenne 1 à 2 fois par seconde en période de pointe.

    Le script doit simplement entrer des paramètres passé par $_GET (une dizaine) dans une table mysql sans en vérifier le contenu.
    Tous les traitements (DELETE des raté/doublons etc .. se feront post rush, la nuit)

    Assez effrayé à l'idée de faire un script de 10 lignes sensé supporté plus de 200 visites minutes en période de pointe j'essaie de faire au mieux pour l'optimiser.
    Du coup j'ai tout plein de question !

    Dans un tel cas de figure, est ce que

    - PDO ou mysqli est mieux adapté que les fonctions mysql de base ?
    - Une connexion mysql persistante à un intérêt ? http://php.net/manual/en/function.mysql-pconnect.php
    - J'ai lu que le moteur Innodb était plus rapide pour des INSERT IGNORE que myiasim vu qu'il lock la ligne et pas la table , était ce mon imagination ou est ce vrai ?
    - Faut il que je change de table quand celle ci atteint une certaine taille ?
    Est ce que la taille d'une table influe sur un INSERT IGNORE ?

    Mysql est il vraiment adapté ? Je n'ai jamais utilisé que lui, est ce que DB2-express-C , postgreSQL ou carrément un nosql serait plus adapté à mon besoin ?

    Voilà toutes ces questions pour à peine 5 lignes de codes o// !

    Merci d'avance pour tous vos conseils !

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Citation Envoyé par ithurts Voir le message
    - PDO ou mysqli est mieux adapté que les fonctions mysql de base ?
    Ne pas confondre PDO avec un SGBDR ! PDO est juste une class permettant d'attaquer différent SGBD. Pour PDO, je pense que c'est bien plus lourd que les fonctions natives MySQL. Il serait néanmoins très intéressant dans le cadre d'une seule page effectuant un grand nombre d'appel à la même requete.

    - Une connexion mysql persistante à un intérêt ? http://php.net/manual/en/function.mysql-pconnect.php
    Surtout pas ! la connexion persistante est valable juste pour une session... Si t'as 200 utilisateurs qui attaquent ta page, t'auras 200 connexions ouvertes en simultanées, ce qui est tout sauf une optimisation... Ca serait en revanche très intéressant avec un script en tache de fond commun à tous les utilisateurs (que tu pourrais attaquer - par exemple - avec un pipe ou un socket).

    - J'ai lu que le moteur Innodb était plus rapide pour des INSERT IGNORE que myiasim vu qu'il lock la ligne et pas la table , était ce mon imagination ou est ce vrai ?
    Je crois que oui, mais que les tables sont beaucoup plus lourdes

    - Faut il que je change de table quand celle ci atteint une certaine taille ?
    Est ce que la taille d'une table influe sur un INSERT IGNORE ?
    non si elle est bien indexée

    Mysql est il vraiment adapté ? Je n'ai jamais utilisé que lui, est ce que DB2-express-C , postgreSQL ou carrément un nosql serait plus adapté à mon besoin ?
    N'en déplaise à certains, je pense que oui. Je ne dit pas qu'il est mieux qu'un postgres, ni qu'il est aussi complet qu'un oracle, mais c'est selon moi un excellent SGBD à qui 200 requêtes / secondes (si elles sont bien conçues), ne devrait pas faire peur.

    PS : Après tes rush, n'hésite pas à faire un petit "optimise" de ta table pour tout bien ré-indexer.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut
    Bonsoir et merci infiniment pour vos réponses !

    Surtout pas ! la connexion persistante est valable juste pour une session... Si t'as 200 utilisateurs qui attaquent ta page, t'auras 200 connexions ouvertes en simultanées, ce qui est tout sauf une optimisation... Ca serait en revanche très intéressant avec un script en tache de fond commun à tous les utilisateurs (que tu pourrais attaquer - par exemple - avec un pipe ou un socket).
    Je suis super intéressé par cette méthode !
    Par contre petit problème : toutes mes recherches google avec "mysql daemon pipe socket connect" ne mènent qu'a des postes relatant des problèmes ..
    Serait il possible d'avoir le nom de cette technique ou un lmgtfy à ce sujet ?
    Merci d'avance !

    N'en déplaise à certains, je pense que oui. Je ne dit pas qu'il est mieux qu'un postgres, ni qu'il est aussi complet qu'un oracle, mais c'est selon moi un excellent SGBD à qui 200 requêtes / secondes (si elles sont bien conçues), ne devrait pas faire peur.
    J'envisageais aussi sérieusement de passer sous postgresql, merci de confirmer ce choix ;D
    Du coup je vais utiliser pdo histoire d'abstraire le sgbd utilisé !

    Cdt

  4. #4
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Méfiance quand même avec la PDO, y'a des méthodes qui fonctionnent avec certains SGBD et pas d'autre (genre LastInsertID()), mais je ne saurais pas dire quoi et avec qui.

    merci de confirmer ce choix ;D
    Ca fait trop longtemps que j'ai pas utilisé postgres pour savoir s'il est vraiment mieux au vu des dernières versions de mysql. Je pense qu'un post dans le topic adapté serait plus judicieux avant de faire ce choix.

    Je suis super intéressé par cette méthode !
    Le problème, c'est qu'elle n'est pas si simple... En effet, même s'il est prévu que ça change dans les version à venir, PHP n'est pas encore adapté à la création de daemons (je crois que PHP gère désormais un garbage collector, mais il faut un temps max d'exécution des scripts illimités, puis c'est pas vraiment fait pour). En d'autre terme, il est préférable de créer ce daemon avec un autre langage, genre PERL.

    Une fois que t'as un petit soft en PERL qui écoute un port sur 127.0.0.1 et qui maintient une connexion ouverte, coté php, c'est ultra simple... un connect, un write et un close.

    Par contre, pour rédiger le soft en PERL, ça fait trop longtemps que j'en ai pas fait pour pouvoir t'aider.

    D'autre part, j'insiste bien sur le fait que c'est une optimisation pour les accès BDD, notamment en terme de connexions ouvertes simultanément. Je ne sais pas quel pourra être le gain global (qui devrait cependant être légèrement meilleur puisque je crois bien que PHP ouvre de toute façon une connexion via socket au serveur SQL local à chaque appel de mysql_connect).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Par défaut
    Bonjour !

    Merci pour ces éclaircissements !

    En fait je pensais le faire en C++ avec un fork off&die, je n'ai jamais fait de perl.
    Mais dans tous les cas j'ai du mal à conceptualiser la chose.

    Donc on a d'un côté un script web
    De l'autre côté un démon connecté à un SGBDR


    Est ce que le démon doit :
    - Offrir un socket tunnelisé vers un autre socket de connexion d'SGBD
    - Écouter,Recevoir les informations, et effectuer lui même les requêtes.


    Mais tout ça a déjà été pensé non ?
    Est ce que ça vaut vraiment le coup de réinventer la roue, je dois pas être le premier confronté à un tel problème et j'ai beau chercher, impossible de trouver quoi que ce soit qui ressemble de près ou de loin à ca !
    Ça m'inquiète un peu
    (et ça me fait penser à : http://www.developpez.net/forums/d96...ayez-utilisee/ )

    Cdt

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Oh oui, ça a du déjà être fait. Après, est-ce que quelqu'un l'a publié sur le net, je ne sais pas.

    Sinon, le C++ est une bonne option, surtout pour ce qui est de la rapidité. Je recommande l'utilisation des socket, car je ne sais pas comment gérer les pipes depuis php, et tu n'auras pas de mal à trouver des codes tout fait, genre un petit serveur de chat en socket où tu auras juste à remplacer la fonction de brodcast par un appel SQL. Pas besoin d'un FORK non plus, utilise plutôt un select() qui te permet de gérer plusieurs connexions de façon propre et sans processus fils (j'avais fait un truc du style y'a quelques années, mais je ne retrouve pas mon source).

    - Offrir un socket tunnelisé vers un autre socket de connexion d'SGBD
    - Écouter,Recevoir les informations, et effectuer lui même les requêtes.
    Bha comme tu l'aurais fatit en PHP avec une connexion permanente... Tu ouvres ta connexion persistante au lancement, et quand des données arrivent sur un socket, tu exécutes une requête SQL avec.

    Après, peut être ne faut-il pas te focaliser sur la méthode que je propose. Moi, j'ai suggéré ça, mais sur un serveur dédié où tu peux configurer le max de connexions simultanées au SGBD en illimité, peut être que PHP suffit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'une nouvelle page
    Par Jiyuu dans le forum Django
    Réponses: 3
    Dernier message: 19/03/2009, 09h28
  2. Appel d' une autre page via un "OnMouveOver"
    Par MaxAntoine1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2008, 20h27
  3. [Debutant(e)]Appel d'une servlet dans une page jsp
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 20/07/2004, 15h02
  4. Réponses: 5
    Dernier message: 11/06/2004, 18h02
  5. [EJB+JSP+Tomcat] Appel d'une page JSP à partir d'un bean
    Par Hakkou dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 02/06/2004, 15h26

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