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

API standards et tierces Java Discussion :

[Stratégie][Fichier][Memoire]Scan disques volumineux


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut [Résolu][Stratégie][Fichier][Memoire]Scan disques volumineux
    Bonjour, j'essaie de réaliser un logiciel dont le premier travail consiste à scanner l'arborescence complete d'une machine pour stocker la liste de tous les fichiers. Or les machines en questions sont d'énormes serveurs, plusieurs millions de fichiers et j'ai des problemes d'optimisations.
    Pour commencer j'ai un thread qui scan les disques de façon récursive (algo présent dans la FAQ), ce thread remplit un vecteur de File qui est sérializer et réinitialisé a chaque fois que sa taille dépasse 35000. Cela crée des 10aines de fichiers d'environ 3Mo.
    A la fin du scan je dois trier par ordre alphabétique tous les fichiers trouvés par leur nom (choix arbitraire). Et c'est la qu'est le plus gros problême. J'ai implementé un "quicksort" (algo de tri rapide) qui fonctionne bien mais je dois lui donner en entrée un vecteur de file contenant tous les file trouvés. Or avec plusieurs millions de files, j'explose allégrement la mémoire.
    Je cherche donc un moyen de faire le tri des fichiers petit bout par petit bout pour ensuite résérialiser les vecteurs triés.
    Si vous avez des idées sur comment accélerer toutes cette procédure je suis preneur. Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Bon mon probleme s'est légèrement modifié. J'ai réalisé un moteur de donnée stable jusqu'à 100 000 000 de record (temps d'un select toto from table inferieur à 200 ms et empreinte mémoire de 2Mo en moyenne). le probleme est l'indexation des données, en fait le temps pour réaliser cette étape. Je suis actuellement à 9ms par record ce qui fait 30 heures pour 10 000 000 de données, c'est lent. Cela vient du tri alphabétique (toujours) mais aussi de la manipulation de treemap. la méthode d'indexation réalise 40000*2 acces disque pour 10 millions de données.
    Donc mon probleme est comment créer une treemap de x millions de clés en peu de temps (sachant qu'a patir de 250 000 cles il y a une joli outof memory error..)?
    Merci.

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    As tu utilisé les propriétés d'extension de mémoire de la JVM.
    Par défaut elle doit démarrer à 32Mo ou 64 Mo.
    Les propriétés sont -Xmx256M et -Xms256M pour utilisation de 256M.
    Je ne me rappelles plus à quoi correspondent exactement c'est deux paramètres mais tu peux chercher dans cette direction cela te donnera une idée.
    Mais dis moi quel est le but fonctionnel de ton application pour stocker tous les fichiers d'un disque...
    Sinon tu dois pouvoir avoir la possibilité de créer des objets sérialisables qui aurait une taille raisonnable (à définir en fonction du nombre de fichiers... algo à chercher).
    Et une fois que tu as créer tes objets sérialisables. Tu les traites tous.
    De toutes façon le scan de plusieurs millions de fichiers demandes forcément bcp de temps.
    Tu n'as qu'à regarder les recherches sur les disques (normalement déjà indexé sont souvent désastreuses si tu scan tout....)
    Sinon pour ta base de données j'ai pas compris :
    le probleme est l'indexation des données, en fait le temps pour réaliser cette étape. Je suis actuellement à 9ms par record ce qui fait 30 heures pour 10 000 000 de données, c'est lent. Cela vient du tri alphabétique (toujours) mais aussi de la manipulation de treemap. la méthode d'indexation réalise 40000*2 acces disque pour 10 millions de données
    Pourquoi utilises tu une TreeMap pour trier.
    Tu n'as qu'à utiliser les fonctions de la base de données "order by asc".
    Non ?
    Voilà en espérant avoir pu t'aider.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse. J'aimerais éviter d'avoir recours à une augmentation de charge au niveau de la ram (je vais tester quand même).
    Sinon le gros avantage de treemap dans mon cas c'est qu'il "trie" les clés en fonction du comparateur que je lui donne. Cela me permet un acces hyper rapide aux données malgré le volume de celles ci. Mais comme je ne peux pas créer un treemap de 10E6 clés je dois réorganiser tous les petits treemaps dans l'ordre qu'ils auraient s'il n'y en avait qu'un. C'est la qu'est le probleme...

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Tu peux peut-être créer des TreeMap inclus les unes dans les autres avec pour clé par exemple la première lettre du mot d'indexation.
    Ayant 27 lettres dans l'alphabet, sur la première lettre cela te permet de divisé par 27, le nombre d'entrée par TreeMap.
    Et tu peux continuer comme çà, sur une à trois lettres par exemple.
    Ce qui te fera en plus une pseudo indexation pour les fichiers commencant par des lettres choisis.
    Enfin voilà , si çà a pu t'aider ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Hello

    Je pense que de passer par une base de donnée serrai plus simple non?
    Et surement plus efficasse
    http://www.jmob.net

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Ca y est j'ai trouvé une méthode assez performante. J'arrive à indexer 10 millions de fichiers en 20 minutes (au lieu de 30 heures pour les versions précédentes). Et ça avec un temps d'accès aux données de l'ordre de 100ms. Le secret rédide dans l'utilisation de tableaux de File à la place de treemap pour la premiere partie du travail et seulement ensuite passage à des treemap.
    Merci à tous ceux qui ont répondu.

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Mais à la base tu n'avais pas utilisé les tableaux de File ?????????????????
    Ah je comprends mieux pourquoi c'était pas performant !!
    Bon l'essentiel c'est que tu es trouvé.
    A+

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    A la base j'avais un probleme pour trier les tableaux de File et pour créer un tableau de plusieurs millions de File...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/01/2006, 09h49
  2. Comment enregistrer fichier Flash sur Disque?
    Par kikica dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 16/01/2006, 13h37
  3. commande pour trouver un fichier sur le disque dur...
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 11/11/2005, 00h10
  4. charger un fichier texte du disque dur
    Par frol dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h09
  5. création de fichiers dans le disque dur
    Par sex-sansbol dans le forum ASP
    Réponses: 6
    Dernier message: 24/08/2004, 09h39

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