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 :

Gros volume de Requêtes asynchrones PHP


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 45
    Par défaut Gros volume de Requêtes asynchrones PHP
    Bonjour,
    je dois pour le compte d'un projet "aspirer" le contenu de de 4 000 000 d'élément via une API REST et l'insérer en base de données.

    J'ai le tableau des url à appeler mais j'aimerais savoir qu'elle est la meilleure approche selon voit pour faire : appel curl (ou autre) + insertion en base dans une boucle tout en garantissant de ne pas passer à la requête suivante sans avoir terminé de traiter la précédente.

    Si vous aviez déjà été confronté à ce cas de figure et si vous aviez des recommandations, je suis preneur. A ce jour je n'ai jamais fait de traitement asynchrone en PHP (uniquement un curl procédural... )

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    "API REST" et "curl" sont des mots exotiques pour moi mais je pense que la meilleure façon d'insérer des données en masse est de le faire en une fois avec une requête LOAD DATA INFILE à partir d'un fichier texte délimité (CSV) et ensuite de répartir ces données dans les différentes tables de la BDD structurée.

    J'ai le tableau des url à appeler
    Si tu as 4 millions d'urls, mets les dans un fichier texte puis lance une requête LOAD DATA INFILE.

    S'il s'agit d'aspirer le contenu de 4 millions d'urls pour les injecter dans une BDD structurée, c'est déjà plus compliqué et il faudra nous exepliquer davantage ton processus et ce que tu veux stocker en BDD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Je pense que la piste de CinePhil qui consiste à utiliser LOAD DATA INFILE est la bonne.

    En principe ton service REST répond à une demande , donc tu es en mesure de savoir si tu as eu une réponse à une requête avant de demander la suivante.

    Donc je ferais quelques chose comme ça (c'est du pseudo code évidemment) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $dataCompleted = true;
    foreach($urls as $url)
    {
    	$datas = get_from_curl($url); // Appel au webservice
    	if($datas !== false)
    	{
    		insert_data_into_file($datas);
    	}
    	else
    	{
    		//Logguer l'url qui pose problème et arréter le traitement
    		$dataCompleted = false;
    		break;
    	}
    }
     
    if($dataCompleted)
    	Import Mysql depuis le fichier crée
    Donc créer un fichier que tu rempli aufur et à mesure que tu recois les données du webservice. Puis une fois le fichier complet tu l'importes dans ton sgbd
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Exécution d'un gros volume de requêtes stockées dans un fichier
    Par tomarineo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/03/2015, 11h17
  2. PHP, crons, gros volumes de données
    Par mookmook dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 05/05/2014, 09h10
  3. Erreur sur requête avec gros volumes de données
    Par justinedr71 dans le forum Développement de jobs
    Réponses: 46
    Dernier message: 29/07/2011, 15h42
  4. Réponses: 3
    Dernier message: 27/01/2007, 09h11
  5. [Gros volume] Optimisations ?
    Par Grubshka dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/04/2005, 10h50

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