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 Perl Discussion :

[Très gros fichier] Algo pour recherche de valeurs


Sujet :

Langage Perl

  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut [Très gros fichier] Algo pour recherche de valeurs
    Salut,
    J'ai plusieurs questions.
    Quelque est la taille limite des variables perl?
    Si je crée un tableau à 100 million d'entrées, bug.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @test = (1..100_000_000);
    2 - je cherche un algo ou une idée pour faire des recherches d'éléments dans un fichier de façon la plus optimale
    J'ai un fichier de 2 Go contenant 2 colonnes (listes de numéros).
    Il y en a en tout environ 150 millions de lignes.
    J'ai un autre fichier qui fait plus de 25Go et je dois y récupérer environ 40 millions d'entrées.qui sont elles séparées par d'autres lignes dont j'ai pas besoin

    Pour chacun des 40 millions d'entrées, je dois vérifier s'ils existent dans le fichier de 130 millions d'entrées puis faire la correspondance entre colonne 1 et 2.

    vu que je peux pas mettre les 130 millions d'entrées dans un tableau pour y faire une recherche, ça devient galère.
    J'ai également tester de faire 10 tableaux de 10 millions de cases, ça passe pas non plus.
    Pourtant J'ai 8 Go de Ram

    Donc j'ai découpe mon fichier de 130millions en plusieurs fichiers d'un million d'entrée et je jongle avec, mais c très long.

    Y a t il une astuce plus simple et rapide?

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Les scalaires Perl sont très gros en mémoire (mais très polyvalents), si tu veux manipuler des très gros tableaux d'entiers, il faut utiliser PDL (Perl Data Language).

    Par ailleurs tes fichiers sont vraiment énormes, franchement ça ressemble beaucoup à un travail pour une base de donnée...
    Si tu tiens à rester en Perl, utiliser File::Sort et File::SortedSeek semble un minimum, maintenir une sorte d'index sur le fichier trié paraît également une bonne idée.

    Si tu dois faire ça souvent, repense aux bases de données, elles sont là pour ça, ou au moins mets en place une politique qui maintient les fichiers triés (et de préférence indexés).

    --
    Jedaï

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Salut jedai,

    Alors, je sais que dans ce genre de cas, il serait beaucoup plus pratique d'utiliser une base de données. En plus, j'aurais pas de difficulté à en faire une avec le premier fichier contenant plus de 130 millions d'entrees.

    Le problème, c'est au moment de la lecture du fichier de 25 Go de données. Je le lis ligne à ligne, normale, mais à chaque entrée intéressante (ou je dois récupérer l'information dans le fichier 1), c'est là que je dois perdre énormément du temps.
    J'ai l'impression (c'est approximatif), qu'il traite environ 4 entrées par seconde, donc sachant que dans le fichier de 25 Go j'ai 38 millions d'entrée, bah ça rame et c'est problématique.

    Donc je ne sais pas si avec une BD, je gagnerais beaucoup de temps même en indexant.
    Mais bon, à tester

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par djibril Voir le message
    Le problème, c'est au moment de la lecture du fichier de 25 Go de données. Je le lis ligne à ligne, normale, mais à chaque entrée intéressante (ou je dois récupérer l'information dans le fichier 1), c'est là que je dois perdre énormément du temps.
    J'ai l'impression (c'est approximatif), qu'il traite environ 4 entrées par seconde, donc sachant que dans le fichier de 25 Go j'ai 38 millions d'entrée, bah ça rame et c'est problématique.

    Donc je ne sais pas si avec une BD, je gagnerais beaucoup de temps même en indexant.
    Ben si c'est l'idée, tu traiteras beaucoup plus vite chaque ligne en utilisant la BD (à moins que j'ai mal compris en quoi consiste le traitement ?)

    --
    Jedaï

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Oui t'as bien compris l'idée. En fait j'ai un logiciel ici qui a besoin de faire ces manip pour créer d'autres fichiers, et ceux chaque semaine, etc.
    Donc comme il rencontre des soucis avec ce fichier de 25Go qui arrête pas de grossir au fil des mois, je prends les devant.
    Donc je vais créer mes BD, tests tout ça, et si c'est OK. Je soumets la modif au responsable du logiciel.
    J'ai l'habitude de jouer avec mysql, je sais pas pourquoi j'y ai pas pensé avant.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    bon j'ai testé via une BD mais c'était pas le choix adéquat. Via perl avec un trie préalable du fichier, j'ai finalement réussi à le faire en moins d'une heure avec ouverture de deux fichiers et lecture ligne à ligne, du basique quoi.

  7. #7
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Points : 44
    Points
    44
    Par défaut Il n'y a pas que le Perl !
    Bonjour,

    As-tu pensé aux outils standard d'Unix genre sort, join, cut ?

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    oui, le trie se fait préalablement via un sort à la unix

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/05/2012, 14h22
  2. [SimpleXML] Analyser un très gros fichier XML
    Par Paulux1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/02/2008, 02h53
  3. Ouvrir un très gros fichier XML
    Par strat0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 02/11/2007, 13h29
  4. Lire un fichier Excel pour modifier les valeurs des cellules
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/10/2006, 15h13
  5. Transformer un très gros fichier XML avec XSL
    Par wozzz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/05/2006, 10h57

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