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 :

Update php oracle sur bcp de donnée


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Update php oracle sur bcp de donnée
    Bonjour,

    Je cherche une solution viable pour la mise à jour de donnée par millier via une interface PHP, le problème c'est qu'une boucle standard PHP produit des time out sur la page. ils s'effectuent mais il affiche une page blanche dans le meilleur des cas.

    J'ai donc penser au SQL LOADER mais update impossible
    Procédure stockée avec un repertoire ( pb le serveur web n'est pas sur la même machine )
    utilisation d'un blob, je stocke un blob puis je le relis en PL SQL ??
    par contre le dernier je sais pas si c'est possible.


    sinon j'utilise MDB2 pour Oracle et j'ai vu qu'il utilisait la fonction Multiple ??
    ou une transaction. Dans tous les cas je cherche à optimiser mes requêtes !
    Bref si vous avez déjà eu ce genre de questionnement, je vous invite à me répondre.

    Ma contrainte est "interactivité", pb c'est l'opposé de du traitement de données en quantité.

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu peux donner plus de détail à propos de la mise à jour de tes données ?

    Toutes les données appartiennent elles à la même table ?
    Pourquoi dois tu faire une boucle ?

    Avec un exemple ça aiderai à mieux comprendre
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut ok pour le code
    Bonjour,

    après upload ud fichier on le lit et on fait une mise à jour sur chaque ligne.

    genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for($i; $i < $nblignes; $i++){
          update_tab("colonne","table","clefprimaire");
    }
    update_tab est une fonction qui fait un update SQL sur une table, une colonne en fonction d'un clef primaire unique.

    sur 100 lignes ok mais sur 30 000, la page commence à ramer.

    Il faudrait faire un traitement en lot

    C'est du code que je reprends d'une appli. ( Bug )

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 33
    Points
    33
    Par défaut
    bonjour,
    c'est confus tout ça (SQL Loader, PS, Blob, ...)
    SQL Loader sert à faire des chargements externes.
    Les Blobs à charger des Binaires ....
    La procédure stockée est - par défaut - l'unique bon moyen de travailler (même sur ce site c'est quasi inconnu).
    Vous devez faire des MAJ. Faites-les!
    Ou faites-la ! (Quelle est la nature de la MAJ ?)
    Et n'affichez-rien .. dans une boucle ! C'est cela qui pourrait ralentit votre MAJ!
    Affichez à la fin!
    Autrement augmentez votre TimeOut! mais ....
    Bonne journée

  5. #5
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Bonjour
    Réponse :

    Désolé pour la confusion, mais l'appli dont je parle utilise le SQL Loader pour le chargement des données en quantité.

    Les traitements sont tous effectués en PL SQL ( Package/fonction/procédures) mais pour certaines fonctionnalités le client extrait et réintègre le fichier avec des données modifiées
    ID NOM adresse
    1 nom1 adresse 1 .......etc sur 30 000 lignes.

    lorsque le client réintègre c'est la qu'est le pb.

    si je fais une boucle standard PHP c'est souvent trop long ( time OUT )
    c'est pour cette raison que j'envisage d'autres solutions. le blob permet le stockage rapide d'un fichier afin de le relire en PL SQL avec des updates.

    olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    Bonjour,

    Si vous n'utilisez pas de requête préparée, cela améliorera les performances. Avec certaines API (C, C++, Java notamment) il est aussi possible de bufferiser les requêtes avant de les envoyer au serveur (par exemple bufferiser 100 updates et les envoyer d'un seul coup), pour limiter les aller-retours client-serveur, mais je n'ai rien vu de tel en PHP.

    Sinon voici une autre façon de faire :
    - créer une définition de table externe Oracle, avec un fichier csv qui aurait comme nom par exemple 'donneesclient.csv'
    - PHP viendrait créer et déposer ce fichier csv sur le serveur Oracle (ou sur le serveur web puis FTP qui pourrait être fait par le job Oracle ci-dessous)
    - un job Oracle viendrait régulièrement exécuter une procédure PL qui lirait la table externe et mettrait à jour les données de la base, puis supprimerait ou renommerait 'donneesclient.csv' (le fichier pourrait au préalable être récupéré en FTP)

Discussions similaires

  1. [Oracle] Echappement de chaînes de caractères Insert, Update PHP / Oracle
    Par fokas dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/03/2009, 13h42
  2. [Oracle] nombreuses erreurs sur les fonctions php/oracle
    Par erox44 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/05/2008, 11h54
  3. Réponses: 11
    Dernier message: 23/11/2007, 09h38
  4. [PEAR][DB] Oracle sur environnement php 5
    Par jilham dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/04/2007, 10h49
  5. Réponses: 6
    Dernier message: 22/06/2006, 11h23

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