"Compresser" les clés d'un hash
Le
JalaL
Bonjour a tous,
J'ai un serieux probleme avec un gros hash auquel je dois ajouter de
nouvelles valeurs pendant l'execution du programme.
Le hash est sous forme de %hash->{$url} = $url_id;
Pour le reduire, j'ai utilisé Digest::MD5. En encodant les URLs, parfois
trop longues, et parfois trop courtes en 32 characteres j'arrive a reduire
la taille totale (length) de toutes les clés à 1/3 de la taille originale
(sans md5). Ce qui est déjà une belle performance.
Inutile d'utiliser Compress::Zlib::memGzip parce qu'en plus de sa leuteur
elle augmente la taille totale des clés.
J'aimerai savoir s'il y a un autre moyen plus efficace et plus performant
que MD5 pour reduire la taille des clés tout en conservant la structure du
hash et des clés uniques.
J'ai un serieux probleme avec un gros hash auquel je dois ajouter de
nouvelles valeurs pendant l'execution du programme.
Le hash est sous forme de %hash->{$url} = $url_id;
Pour le reduire, j'ai utilisé Digest::MD5. En encodant les URLs, parfois
trop longues, et parfois trop courtes en 32 characteres j'arrive a reduire
la taille totale (length) de toutes les clés à 1/3 de la taille originale
(sans md5). Ce qui est déjà une belle performance.
Inutile d'utiliser Compress::Zlib::memGzip parce qu'en plus de sa leuteur
elle augmente la taille totale des clés.
J'aimerai savoir s'il y a un autre moyen plus efficace et plus performant
que MD5 pour reduire la taille des clés tout en conservant la structure du
hash et des clés uniques.

Poser une question


Pour optimizer encore plus, je voulais MD5er les URLs plus longues que 32
caracteres seulement, les autres URLs plus courtes seront stockées sans
modification. je pensais faire mieux mais non... un peu bizare.
Bah c'est là que je decouvre que MD5 donne un hash de 16 caracteres
seulement. Ca permet d'economiser quelques Ko de memoire, et a long terme ca
economisera quelques centaines de Ko voire quelques Mo.
Je cherche toujours a faire mieux, vos suggestions sont les bienvenues.
Autant dire rien dans la plupart des situations courantes.
Décrire ce que tu veux faire au final, et pas les moyens techniques que tu
mets en oeuvre pour y parvenir.
Faut lire un peu ce que j'ai ecrit !!!
Si je continu mes recherches en parallele c'est just pour ne pas attendre 3h
une reponse de ce genre.
J'ai lu : tu veux bidouiller des hashes de hashes d'URL pour que ça prenne
moins de place, mais tu ne dis pas ce que tu veux faire avec.
Pouvoir chercher dans le hash l'identifiant d'une URL, si l'URL n'existe pas
je la rajoute avec son identifiant. L'identifiant c'est un entier que
j'incremente en cas de nouvelle URL. Ca m'evitera d'utiliser une base de
données ou un fichier texte.