et que l'on en compte pas exécuter 1 million de fois cette ligne ou l'exécuter sur 1 giga ou 1 gibi de données, donc qu'aucune optimisation n'est nécessaire
Franchement pour avoir beaucoup bossé sur des vrais gros volumes de données et sur des échantillons qui permettent de ne pas être IO bound bien franchement l'optimisation des pipes inutiles et les adaptes du UUOC me font juste marrer. Dans 99.9% il n'y a aucune différence. Les années 90 c'est fini depuis un moment...
$ ls -lh source.1GB ; wc -l source.1GB
-rw-rw-r--. 1 user user 1.2G Oct 23 20:06 source.1GB
15993320 source.1GB
# Baseline des perfs IO
$ sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" && pv source.1GB > /dev/null
1.16GiB 0:00:16 [72.9MiB/s] [=================================================================================================>] 100%
Notons que les exemples sont sur ~1Go, mais les différences n'évoluent pas quelque soit la taille des fichiers que ce soit sur 10Mo ou 100Go.
Bref sauf cas totalement patologique, tu peux faire autant de UUOC que tu veux, utiliser trois outils différents alors qu'un pourrait suffire ça n'a strictement aucun impact dans la vie réelle. La différence de perf est bien plus petite que la marge d'erreur. Si tu cherches à optimiser tes batchs tu te bas clairement pas sur cet ordre de grandeur et tu fais les choses bien différemment.
Donc il faut arrêter avec les UUOC et autres bêtises. Construisez vos commandes de la façon la plus pratique possible pour l'édition. Par exemple il peut être très pratique de laisser la partie qu'on est en train de bidouiller à la fin de la ligne plutôt qu'au début. Par exemple "grep token file" peut être plus chiant à éditer que "cat file | grep token". De même quand on construit ses enchaînement de pipes petits à petit.
[^] # Re: 42
Posté par ckyl . En réponse au sondage Les commentaires et vous ?. Évalué à 10.
Franchement pour avoir beaucoup bossé sur des vrais gros volumes de données et sur des échantillons qui permettent de ne pas être IO bound bien franchement l'optimisation des pipes inutiles et les adaptes du UUOC me font juste marrer. Dans 99.9% il n'y a aucune différence. Les années 90 c'est fini depuis un moment...
IO bound:
En cache:
Notons que les exemples sont sur ~1Go, mais les différences n'évoluent pas quelque soit la taille des fichiers que ce soit sur 10Mo ou 100Go.
Bref sauf cas totalement patologique, tu peux faire autant de UUOC que tu veux, utiliser trois outils différents alors qu'un pourrait suffire ça n'a strictement aucun impact dans la vie réelle. La différence de perf est bien plus petite que la marge d'erreur. Si tu cherches à optimiser tes batchs tu te bas clairement pas sur cet ordre de grandeur et tu fais les choses bien différemment.
Donc il faut arrêter avec les UUOC et autres bêtises. Construisez vos commandes de la façon la plus pratique possible pour l'édition. Par exemple il peut être très pratique de laisser la partie qu'on est en train de bidouiller à la fin de la ligne plutôt qu'au début. Par exemple "grep token file" peut être plus chiant à éditer que "cat file | grep token". De même quand on construit ses enchaînement de pipes petits à petit.