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

Langage PHP Discussion :

Optimisation d'un "algo".


Sujet :

Langage PHP

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 Optimisation d'un "algo".
    Bien le bonsoir

    Alors voilà, cette fois ci on m'a confié de faire un outil d'extraction de donnée dedupliqué en php (ou tout autre .net).
    Donc bon comme un con j'ai direct codé le bousin et je me suis fait remonté les bretelle car je n'avais pas fait de doc de spec ou je ne sais quoi en presentant tout fiers les premiers résultats.
    Et finalement ce truc inutile va me servir, car ce que j'ai fait est lent, très lent, les données que je traite se mesurent en centaine de mega octet et j'aimerais vraiment l'optimiser car attendre 15 min pour voir un fatal error memory insufficient c'est boaf quoi !

    Ainsi ce que j'ai fait est limité par ma conception des choses, n'ayant pas d'oreille à qui confier mes problèmes d'algorithme dans mon entourage je me confie ici !

    J'aimerais savoir ce que vous en pensez et si vous avez de bonnes idées pour améliorer la vitesse d'exécution des choses !

    Voici donc un schéma fait avec mes ptites mains qui apparait dans le doc :


    Ainsi que les fonctions utilisées : (pour faciliter les tests et réduire la taille du code j'ai fixé certains paramètres )
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    set_time_limit(0);
    ini_set("memory_limit","120000000000000000000000M");
     
    function parse_csv($csv_name, $separator)
    {
    	$csv_array = array();
    	$row = 0;		
    	$handle = fopen($csv_name, "r");	
    	while (($data = fgetcsv($handle, 10000, $separator)) !== FALSE)
    		if (count($data)) // on ne prends pas les lignes vides
    			$csv_array[$row++] = $data;					        			
    	fclose($handle);
     
    	return $csv_array;
    }
    function invert_array ($array)
    {						 
    	$inverted_array = array();
    	for ($i = 0; $i < count($array[0]); $i++)
    	{
    		for ($j = 0; $j < count($array); $j++)
    			$inverted_array[$i][$j] = $array[$j][$i];
    	}
    	return $inverted_array;		
    }
     
    function search_val_array($array, $value)
    {
    	$result = array(); $result[0] = array(); $result[1] = array();
    	$row = 0;
    	for($i=0; $i < count($array[0]); $i++)
    		if(strpos($array[0][$i], $value) !== FALSE && isset($array[1][$i]) && $array[1][$i] != "")
    			$result[1][$row++] = $array[1][$i];
    	return $result;	
    }
     
    function deduplicate ($array)//, $column)
    {
    	$result = array(); $result[0] = array(); $result[1] = array();
    	$row = 0;	
    	for ($i=0; $i < count($array[1]); $i++)
    	{
    		for ($j = 0; $j < count($result[1]); $j++)
    			if ($array[1][$i] == $result[1][$j])
    				break;
    		if ($j == count($result[1]))
    			$result[1][$row++] = $array[1][$i];
    	}
    	return $result;							
    }
     
    function deduplicate_fusion ($array1, $array2)
    {
    	$result = $array1;
    	$row = count($array1[1]);	
    	for ($i=0; $i < count($array2[1]); $i++)
    	{
    		for ($j = 0; $j < count($result[1]); $j++)
    			if ($array2[1][$i] == $result[1][$j])
    				break;
    		if ($j == count($result[1]))
    			$result[1][$row++] = $array2[1][$i];
    	}
    	return $result;			
    }


    Merci infiniment d'avance pour toute vos contributions !

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Plutôt que de réinventer la roue, à tu regarder ce qui se faisait déjà ?

    Notamment du coté de Talend ?
    http://fr.talend.com/products-data-i...pen-studio.php
    explication des fonctionnalités :
    http://libre-d-esprit.thinking-days....d-open-studio/

    Si j'ai bien compris tu souhaite intégrer des fichier csv dans une base de données ?

  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
    Non ça doit arrive dans un .csv à la fin après deduplication et modification.
    Waw en effet la solution tout en un cet outil, ça m'a l'air tout juste génial.

    Par contre j'espère que ce ne sera pas plus lent que ce que j'ai déjà fait !

    Merci infiniment, je savais que je postais au bon endroit !
    Tu me révolutionnes la vie là !

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

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