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

Modules Perl Discussion :

Problème avec Storable cherche une alternative


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut Problème avec Storable cherche une alternative
    Salut a tous je cherche une alternative au module Storable celui-ci me cause des soucies en effet certaine fois la désérialisation des données bug c'est un problème récurrent avec ce module et j'en aie franchement plein ** ***

    Il s'agit de tables de hash qui sont sérialisé par une première applction puis traié par un seconde le tout sur la meme machine.

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    à priori sur un ememe machine (meme version du module et meme architecture) tu ne devrais jamais avoir ce prob.
    Pour passer d'une architecture à l'autre mieux vaut utiuliser nfreeze (et meme dans tous les cas en fait, elle n'est pas plus lente que freeze).
    Ensuite il y a des choses qu'on ne peux pas facielement serialiser, comme par exemple une reference de code (on peut le faire avec Storable en utilisant deparse, mais il faut specifier l'option, et dans tous les cas c'est plutot dangereux... cf Data:umper::Streamer pour comprendre pourquoi).
    Il y a aussi evidemment les filehandler et autre object "exterieurs" (genre handler de base de donnée, etc...) qui ne sont pas serialisables.

    Ensuite ca peut aussi etre du à une manipulation invlotaire sur les données serialisées (genre oubli de binmode en la sauvant/lisant sur disque). Pour verifier ca tu peux tenter de l'encoder en base64 apres serilisation, puis al decoder avant deserialisation (juste pour tester).

    Il y a evidemment pas mal d'alternatives à storable (yaml::syck, data::dumper::streamer, etc...) mais storable est surement al pluse efficace, donc si ca plante à priori c'est qu'il y a quelque part dans ton process un truc qui deconne

  3. #3
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Bah pourtant je sauve mes données comme cela :

    Open(FILE, "> toto.web) or die 'Tain marche pas ';
    flock(FILE,2);
    binmode(FILE);
    print FILE Storable::nfreeze($data);
    flock(FILE,8);
    close(FILE);


    Et je les récupère comme cela

    Open(FILE, "toto.web) or die 'Tain marche pas ';
    flock(FILE,2);
    binmode(FILE);
    local $/ = undef;
    my $Content = <FILE>;
    flock(FILE,8);
    close(FILE);

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Par défaut
    et tu es sur que tu maitrise exactement les données que tu serialize?
    pas de ref de code? pas d'objet dont tu n'es pas sur de la structure (genre inside out object ou object contentnant d'autres truc non serializables), pas de file hanlder? pas de handle dbi? etc...

  5. #5
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Oui je sais exactement ce que je sérialise, il s'agit d'un hash contenant la réponse a une requete HTTP lancé avec HTTP::Async , et quelques autres infos pour que la seconde applie puisse commencer a bosser.

    voila le hash :

    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
     
     
              my $ToTreat = {};
     
              # Retrieve url
              my $url = undef;
     
              if ( exists $response->{'_previous'} ) {
                $url = $response->{'_previous'}{'_request'}{'_uri'}->as_string;
              }
               else {
                $url = $response->request->url->as_string;
              }
     
              $ToTreat->{'_response'}      = $response;
              $ToTreat->{'_url'}           = $url;
              $ToTreat->{'_todo'}          = $Queue{$url};
              $ToTreat->{'_last_modified'} = defined $response->header('last-modified') ? str2time($response->header('last-modified')) : time();
     
              # Check content-type
              my $content_type = undef;
     
              if ( ref($response->{'_headers'}{'content-type'}) eq "ARRAY" )
              {
                my $type = $response->{'_headers'}{'content-type'}[0];
                   $type = s/(.*);//;
                   $content_type = $1;
              }
               else 
              {
                 $content_type = $response->{'_headers'}{'content-type'};
              }
     
              $content_type = $self->_content_type($content_type);
     
     
              $ToTreat->{'_content_type'} = defined $content_type ? $content_type : "text-html";
     
              # Generate sha-1 name   
              $ToTreat->{'_name'} = sha1_hex($url); 
     
              # Write data
              $self->_write_data($ToTreat->{'_name'},$ToTreat);
     
              # Delete link from data queue
              delete $Queue{$url};

    Il n'y a que $response qui soit un objet

Discussions similaires

  1. Problème de requete trop lente , je cherche une alternative
    Par mobscene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/05/2007, 10h39
  2. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 12h05
  3. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  4. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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