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 :

Structure de données pour gros volume de données


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    fdgdfg
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : fdgdfg

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Structure de données pour gros volume de données
    Bonjour,

    Je travaille sur des gros volumes de données (de plusieurs centaines de Mo à quelques Go) qui doivent obligatoirement être chargée en mémoire (les informations sont interconnectées).
    Actuellement, mon programme utilise des tables de hashage ce qui est catastrophique au niveau de la mémoire (Le programme plante au bout de quelques heures).

    Je souhaiterai donc savoir s'il existe une structure de données plus légères en mémoire pour ce type de problème.
    J'ai vu sur d'autres postes qu'il existait le module PDL mais si j'ai bien compris, il requiert un interpréteur à part. Je souhaiterai continuer à travailler avec l'interpréteur perl.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    PDL ne necessite pas d'interpreteur à part, il faut juste installer le module (on le trouve meme sur certains repository ppm).
    PDL permet de manupuler des matrices (array à plusieurs dimensions), mais elles ne sont pas creuses donc ca peut ne pas repondre à tes besoins.

    Les hash de perl sont plutot gourmande en RAM (environ 60o par element, sans compter la taille de l'element lui meme) mais tu peu essayer d'avoir recours à d'autres types de hash, comme par exemple les ghash http://search.cpan.org/~lbrocard/Tie-GHash/ ou les judy array (mais le binding perl de CPAN est fait de telle sorte que tu ne gagnera pas grand chose en RAM avec, dommage car c'est une super librairie)

    A koi ressembles tes données?

  3. #3
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Quelle est la structure de tes données ?

    Il y a généralement une solution spécifique, donc il faudrait que tu donnes un exemple des données de chaque fichier que tu lis, et que tu précises si chaque fichier s'il est trié ou pas, et s'il y a des fichiers plus petits que d'autres.

    PS: Si jamais tu n'arrives pas à tout stocker en mémoire, je peux te conseiller de passer par une BDD MySQL, si possible sur une machine séparée, que tu rempliras et consulteras à l'aide du module DBI et DBD::MySQL

  4. #4
    Nouveau membre du Club
    Profil pro
    fdgdfg
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : fdgdfg

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    alors les fichiers décrivent un réseau
    un fichier commence par décrire les objets les plus globaux et se termine par les objets les plus détaillés.
    chaque type d'objet possède un bloc dans le fichier avec son nom et ses caractéristiques.
    mon programme lit toutes ces informations et les insère dans plusieurs hashtables (en fonction du type d'objet) en mettant en clé le nom des objets et/ou certaines propriétés
    une fois chargé en mémoire, je réalise une batterie de test sur les informations contenues en mémoire
    comme tous ces objets peuvent être interconnectés, je dois avoir tout les éléments en mémoire d'où mon soucis.

  5. #5
    Nouveau membre du Club
    Profil pro
    fdgdfg
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : fdgdfg

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Ces informations étaient auparavant insérées dans une base MySQL mais le processus était beaucoup trop long. Par contre, la base était sur le même serveur que le script perl.

    Pour quantifier la mémoire utilisée, j'ai installé la libraire Devel::Size. Savez vous si la quantité renvoyée est fiable ?

  6. #6
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Je ne connais pas Devel::Size, donc je ne sais pas si c'est fiable ou pas.

    La vraie question est : "as-tu rééllement besoin de stocker TOUTES les informations en mémoire à un instant T, ou peux tu trouver un critère qui te permet de regrouper les informations, et travailler sur des sous-groupes" ?

    Si tu arrives à classer tes informations en sous-ensembles, tu pourras charger moins de données en mémoire simultanément !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    tu peux utiliser des hash avec un tie vers un DBM de ton choix: tu pourra acceder à tes données comme un hash nromal, mais elles serton stockées sur disque.
    Je te conseil BerkeleyDB pour cet usage.
    En configurant un bon cache tu devrait obtenir de bonnes perfs.
    Si tes hash sont à plusieurs dimensiosn alors utilise putot DBM-Deep

  8. #8
    Nouveau membre du Club
    Profil pro
    fdgdfg
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : fdgdfg

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    merci pour votre aide
    je vais réfléchir à une meilleure implémentation du programme

  9. #9
    Nouveau membre du Club
    Profil pro
    fdgdfg
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : fdgdfg

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    le fait de stocker mes données sur disque plutôt qu'en mémoire(tie vers un DBM), çà risque de grandement diminuer les performances non ?
    remarque çà risque moins de planter

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    oui, mais tu peux faire confiance au cache du DBM et du disque/os pour que les données les plus sollicitée soient gardée en memoire (si tu a une certaine localité dans tes accès evidemment)
    a l'extreme il peut utiliser toute ta ram disponible comme cache

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/03/2011, 10h07
  2. Réponses: 1
    Dernier message: 14/05/2010, 14h54
  3. Réponses: 2
    Dernier message: 03/12/2007, 12h48
  4. Réponses: 3
    Dernier message: 11/05/2007, 13h47
  5. Gérer le gros volume de données
    Par berceker united dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 21/07/2006, 19h29

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