Avis aux amateurs de programmation.
En vu d'écrire des job map/reduce, Je suis en train d'évaluer la rapidité de traitement de flot de données par différents langages de programmation (et différentes implémentations). Pour cela, j'ai mis au point un
benchmark qui a certaines règles expliquées dans le
README. Ce benchmark prend en compte la rapidité d'assimilation des données, leur découpage, leur stockage en mémoire, et la restitution par d'éventuelles conversions de type. On est d'accord que c'est loin d'être parfait mais c'est déjà une bonne base, comme le prouve l'histoire du script Python.
Dans le benchlark, les parseurs sont là comme références mais les processeurs sont les vrais membres interessants. Le benchmark dispose d'un générateur de données et teste les programmes fournis pour fournir les temps de traitement. Voici les résultats actuels sur mon ordinateur principal :
Perl : 10 secondes
Python (première version) : 31 secondes
Python (deuxième version) : 17 secondes
Notez, que pour la seconde version du script python, un développeur chevronné est venu coder le script après ma question sur
codereview.stackexchange.com. On voit que l'optimisation a été efficace.
Ce que vous pouvez faire :
- Améliorer un script existant
- Coder dans votre langage préféré un processeur (il suffit de lire stdin et d'écrire sur stdout).
Les règles du jeu sont dans le README (en anglais).
Si vous avez des doutes, les scripts perl sont la référence d'implémentation (parser et processor). Comme le concours ne concerne que les processeurs, voici comment simplement savoir quoi faire :
Input (reproduit le fichier en entrée qui fera 35MO) :
$ cat common/tinydataset.txt
# This file is for demonstration only
1 This IsAnExample 1
2 This IsTooAnExample 2.4
2 This IsTooAnExample 2.7
1 That IsAMalformedline
3 That IsAMalformedline Too
ouput (ce que doit produire un processeur) :
$ cat common/tinydataset.txt | perl perl5/simpleprocessor.pl 2> /dev/null
#PERL REFERENCE PROCESSOR
#TRANSFORMED INPUT
1,1,IsAnExample,This
2,2,IsTooAnExample,This
2,3,IsTooAnExample,This
#DATADUMP
This: (IsAnExample:1) (IsTooAnExample:5)
#REPORT
#PERL REFERENCE PROCESSOR
#perl version: 5.14.2
parsed line: 6, commentary line: 1, unknown line: 2, keystat: 2.
Notez que dans le transformed output, la somme est arrondie alors que danas les clés elle est tronquée (mais l'addition a bien lieue en float). C'est un peu compliqué mais ça compte aussi dans les performances qui sont intéressantes à mesurer.