2010-07-23 11 views
2

J'ai un fichier de 1 Go de tables avec des données séparées par des colonnes. Je l'ai analysé et stocké dans le hachage. Plus tard, j'utilise ce hachage pour mes futurs travaux. Mais lors du développement de mon code chaque fois que je compile pour tester, l'analyse et le stockage dans le hachage sont exécutés et ce qui ralentit mon programme.Enregistrement d'un hachage en mémoire

Y at-il un moyen de le stocker de sorte que je n'ai pas besoin de le compiler encore et encore.

Répondre

2

Pas vraiment. Cette information doit être chargée dans la mémoire en quelque sorte. Néanmoins, sérialiser l'objet de hachage sur le disque peut aider, puisque la désérialisation est probablement plus rapide que votre code. Vous pouvez consulter freeze ou check wikipedia on Serialization pour d'autres conseils.

Check out perl documentation for FreezeThaw:

use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard); 
$string = freeze $data1, $data2, $data3; 
... 
($olddata1, $olddata2, $olddata3) = thaw $string; 
if (cmpStr($olddata2,$data2) == 0) {print "OK!"} 

Tout ce que vous devez faire est maintenant magasin $string dans un fichier une fois analysé, lire et thaw it!

+5

['Storable'] (http://p3rl.org/Storable) est dans core et est plus largement utilisé que' FreezeThaw'. – daxim

+0

Désolé. Cela fait dix ans que j'ai fait Perl pour la dernière fois. Je suis un peu rouillé et je ne sais plus comment ça marche ... Mais j'aime vraiment les noms de fonctions 'freeze' et' degel'. –

0

Les données de Perl ne sont pas stockées de manière très efficace. Il peut prendre dans les pires cas jusqu'à dix (20-80) fois plus de mémoire. Notez que cela ne peut arriver que dans le pire des cas. Si cela arriverait avec votre jeu de données de 1 Go, vous devriez le remarquer. Donc je pense que ce n'est pas votre cas. Les structures de données Perl sont très rapides, elles échangent souvent de la mémoire pour la vitesse. Si le montant de la mémoire dans votre cas est raisonnable, vous pouvez le traiter et utiliser l'approche directe recommended par Daren Thomas ou plus probablement Storable recommandé par daxim.

Si vous estimez que la consommation de mémoire est trop importante dans votre boîtier, vous pouvez utiliser un stockage de clé/valeur intégré. Si vous ne modifiez pas les données après chargement, vous pouvez utiliser CDB_File, ce qui est un peu plus rapide que BerkeleyDB, mais cette dernière vous permet de modifier les données à la volée. Vous pouvez choisir plus tard aussi parce que c'est une solution plus commune et plus flexible.

Questions connexes