[gull] Compression : Suite

Daniel Cordey dc at pxcluster.com
Sat Nov 28 02:41:53 CET 2020


Bonjour tout le monde,

Puisque l'on en est à parler compression, voici l'extrait d'un mail que j'ai envoyé à Félix au début septembre. Depuis mes développement (le soir) ont dérivés vers un serveur avec des conteneurs Dockers et la réécriture de quelque chose de plus intelligent que fail2ban (on s'amuse comme on peut).

Donc, avec une vitesse d'exécution et un taux de compression bien supérieure à tout ce qui existe, ça devrait en titiller plus d'un :-) Comme je l'ai dit, je vais mettre tout ça en GPL V3, mais j'ai besoin d'un peu de temps pour plusieurs raisons. Si quelqu'un a une idée pour héberger le code quelque part en évitant github, je suis preneur car le développement de mon serveur prend du temps, vu que je veux y associer le développement d'outils de gestion de cluster non-stop et d'autres outils de sécurité.

dc

/*************** Extrait *************/

Je me suis finalement remis à mon fameux problème de compression de valeurs
numériques, et j'ai enfin terminé l'algorithme complet. Je l'ai fait en
Python car j'ai fait plein d'essais (je n'ai d'ailleurs pas fini) et Python
me laisse beaucoup de liberté pour faire joujou et faire une quantité
d'essais... Bref, mon code n'est absolument pas optimisé du tout, c'est même
l'horreur car j'avais besoin (et j'ai toujours pour mes nombreux et futures essais)
d'imprimer plein de valeurs intermédiaires. J'ai d'ailleurs passablement
séché sur le compactage des bits car je n'ai pas arrêté de faire des
conneries...

Bref, je suis super content du résultat final ! J'ai comparé mon taux de
compression et les temps d'exécutions avec les commandes :

- compress
- gzip
- bzip2
- xz

J'obtiens le tableau suivant :

Commande	Temps		Taille		ratio nouveau/original

compress	:  1.193 	18'659'929	22.5%
gzip		:  2.00		13'127'832	15.8%
bzip2		:  5.340	10'084'519	12.1%
xz		: 36.243	 7'288'500	 8.8%

Et maintenant mon code que j'appelle 'nuc' pour "NUmerical Compress"

nuc		: 12.702	 4'726'559	 5.7%

Soit un taux de compression de 17.5 (cad compressé à 94.3%)

Taux de compression impressionnant... Le temps n'est pas si mal, considérant
que c'est du très bête Python interprété et vraiment bourrin. Je vais
maintenant faire une version en utilisant NumPy et je devrai peut-être
arriver un peu de dessous des temps de bzip2 (toujours pour de
l'interprété). Ensuite, je vais passer au codage en C (depuis Python
toujours) et je devrais battre même compress les doigts dans le nez (du
moins je pense).

Qui plus est, mon mode de compactage est massivement plus rapide que les
autres quand il s'agit de décompresser. Surtout, je suis dans une
configuration de donnée pas forcément très favorable et je devrais arriver
aux alentours de 2'500'000 bytes avec une autre config, me donnant un taux
de compression 97-98% par rapport au fichier original, tout en étant encore
plus rapide. Je ferai des essais ce week-end

Voici les 10 premières lignes du fichier d’origine qui fait un peu plus de
83 MB (+2'300'000 lignes):

1590962409.747,1.069640,1.069710,0
1590962409.849,1.069640,1.069700,0
1590962410.249,1.069640,1.069710,0
1590962412.697,1.069660,1.069710,0
1590962412.798,1.069660,1.069720,0
1590962414.58,1.069650,1.069720,0
1590962414.926,1.069650,1.069730,0
1590962415.15,1.069650,1.069720,0
1590962415.432,1.069650,1.069730,0
1590962416.739,1.069650,1.069720,0



More information about the gull mailing list