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

Windows Discussion :

[QUEST] Lecture et traitement de nombreux fichiers


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [QUEST] Lecture et traitement de nombreux fichiers
    Bonjour, je viens vers vous avec quelque questions.

    Je suis en stage et pour le boulot qu'on m'a confié, j'ai besoin de lire jusqu'à 200000 fichiers d'acquisition (binaires) pouvant peser dans les 500 ko environ. J'ai fait un petit programme en console windows qui parse ce type de fichier (en C standard) afin de pouvoir les traiter un par un. Mais maintenant j'ai besoin de vos lumières pour décider quelle stratégie je dois appliquer pour lire les 200000 fichiers de manière optimale, donc voilà mes questions:

    - le fait d'avoir 200000 fichiers dans le même répertoire est-il plus couteux que de mettre ces fichiers dans plusieurs répertoires?
    - serait-il avantageux de concaténer ces fichiers en un plus gros fichier?

    (toute autre idée sera la bienvenue ^^)

    Pour effectuer ces traitements, je disposerai d'une machine sous windows (vista) équipée d'un Xeon 4 coeurs (le soft sera parallèlisé afin de tirer parti des quatre coeurs), de deux velociraptors en RAID0 et pour la ram je sais plus (je n'ai pas accès a cette machine quand je veux).

    Merci d'avance à ceux qui répondront.

    A bientôt.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par 6SiCK6 Voir le message
    - le fait d'avoir 200000 fichiers dans le même répertoire est-il plus couteux que de mettre ces fichiers dans plusieurs répertoires?
    Normalement, oui. La recherche dans un répertoire est un peu plus longue s'il y a beaucoup de fichiers.

    Citation Envoyé par 6SiCK6 Voir le message
    - serait-il avantageux de concaténer ces fichiers en un plus gros fichier?
    Oui, surtout si le fichier final est non-fragmenté.

    Toutefois, concaténer "à la main" ces fichiers avant traitement risque de te faire perdre énormément de temps, au point de rendre l'opération plus coûteuse au bilan final... Il faudrait que les données soient nativement dans un seul fichier, ce qui est peu probable.
    Le déplacement vers de multiples répertoires aura le même effet. Il faudrait que les données soient nativement organisées comme ça, y compris pour les futurs ajouts de fichiers binaires.

    Bref, si actuellement tu as 200.000 fichiers dans un seul répertoire et que les "nouveaux" fichiers créés vont systématiquement dans ce répertoire là, faudra faire avec si ce n'est pas modifiable : toute modification "temporaire" d'organisation te fera perdre plus de temps qu'autre chose.

    Citation Envoyé par 6SiCK6 Voir le message
    (toute autre idée sera la bienvenue ^^)
    Cela dépend aussi de ce que tu vas faire de ces fichiers : OK, tu dis que tu as un programme pour les parser. C'est très bien, mais que produit-il comme résultat ?

    De façon générale, Windows gère bien mieux les threads que les processus : il vaudrait donc mieux rendre ton programme multithread et multicoeur plutôt que de l'appeler quatre fois via un batch.

    Ensuite, une piste qui pourrait être intéressante serait de dédier un coeur à lire les fichiers et alimenter les coeurs de "calcul" (trois, donc) avec les données, plutôt que de laisser les coeurs se "battre" pour l'accès au disque. Si tu dois écrire un résultat dans un fichier, alors dédier un autre coeur à cette écriture (si possible en différé, ou l'expédier par réseau ?) peut là aussi être une piste d'optimisation.

    Après, sans savoir ce que tu dois réellement faire de façon concrète, difficile de t'aiguiller plus que ça...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ok, merci pour ta réponse rapide.

    Pour ce qui est de ce programme de parsage il est en console uniquement à des vues de test, donc la version "finale" du soft sera parallèlisée à l'aide de threads et bénéficiera d'une interface graphique MFC, il ne sera pas question de scripts batch.

    Ensuite lors de la lecture des fichiers, je stocke les infos des fichiers dans une structure. Et c'est sur cette structure que seront faits les plus gros calculs.

    Pour finir, l'organisation des fichiers d'acquisition ne pose pas de problème, mon maitre de stage fera en sorte que lors de l'acquisition, ces fichiers soient concaténés, ou bien stockés dans des dossiers différents ou toute autre bidouille. En tout cas mon soft n'interviendra que lorsque tous les fichiers d'acquisition auront été écrits sur le disque.

    Ce qu'il faut avoir à l'esprit c'est la performance ^^.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Heu, j'avais pas fait le calcul... Au total, ça fait 96 gigas de données environ, ton truc... Tout charger en RAM ?? Utopique !

    Si l'organisation est "libre", alors un seul répertoire contenant un certain nombre de fichiers concaténés (disons que le nombre de fichiers unitaires concaténés doit correspondre à une unité de calcul significative) me semble la meilleure solution... Fichiers de 500 Mo maximum, soit l'équivalent de 1000 fichiers unitaires, pour un total de 200 "gros" fichiers au maximum dans le répertoire général. Je pense que là, à la louche du moins, tu arrivera à quelque chose de proche de l'optimal (les très très gros fichiers peuvent devenir lents à gérer parfois).

    De plus, cela permet de charger intégralement en RAM un de ces fichiers concaténé (500 Mo, c'est gérable par la plupart des PC quand même), et donc de travailler à peu près sereinement. Si tu as assez de RAM, tu peux tenter aussi de commencer à précharger (en priorité basse) le prochain fichier pendant le traitement du précédent.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Heu, j'avais pas fait le calcul... Au total, ça fait 96 gigas de données environ, ton truc... Tout charger en RAM ?? Utopique !
    Je ne voulais pas créer un seul fichier avec tous les fichiers d'acquisition, je me disais bien que j'allais faire crasher la ram ^^

    En tout cas merci pour ta réponse, je vais en discuter avec mon maître de stage pour voir ce qu'il est possible de faire.

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par 6SiCK6 Voir le message
    Je ne voulais pas créer un seul fichier avec tous les fichiers d'acquisition, je me disais bien que j'allais faire crasher la ram ^^
    Ça me rassure...

    Citation Envoyé par 6SiCK6 Voir le message
    En tout cas merci pour ta réponse, je vais en discuter avec mon maître de stage pour voir ce qu'il est possible de faire.
    De rien. Un seul répertoire avec 200 "gros" fichiers de maximum 500 Mo (ou 1000 données unitaires, en fonction du premier atteint) me semble tout à fait raisonnable pour ma part.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

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

Discussions similaires

  1. Optimisation lecture et traitement "gros" fichiers
    Par beware dans le forum Langage
    Réponses: 22
    Dernier message: 19/03/2015, 16h24
  2. Lecture de nombreux fichiers txt
    Par ogrius dans le forum MATLAB
    Réponses: 7
    Dernier message: 29/01/2015, 10h10
  3. [AC-2000] lecture et traitement d'un fichier xml
    Par alex61 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/01/2011, 18h23
  4. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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