Je relance le sujet.
L'idéal serait de trouver un algorithm permettant de trier un fichier tabulé quelconque.
Exemple : Nous avons un fichier à tirer de plusieurs Go contenant une centaine de colonnes non numérique. Ce fichier ferait environ 10 millions de lignes. Nous sommes sous Windows, ou bien sous linux et nous n'utilisons pas l'utilitaire sort de linux.
Comment tirer ce fichier en fonctionne de la colonne 2.
colonne1 colonne2 colonne3 ...
data11 data12 data13 ...
data21 data22 data23 ...
...
Sous Excel, il est impossible de trier ce fichier car Excel limite le nombre de lignes et de colonnes.
En Perl, la première idée serait de mettre en mémoire le fichier puis d'utiliser sort. Mais là, ce serait de la folie et un jolie out of memory devrait surgir.
Alors avez vous une idée d'algorithm?
Je pensais à ceci :
- Lire le fichier en question ligne à ligne
- Créer un fichier par ligne
- stocker dans un hash le numéro de la ligne en clé et en valeur la colonne à prendre en considération pour le tri.
- Lire le hash via sort de la colonne puis créer le fichier trié.
Question :
1- La création de millions de fichiers a t il un coup énorme niveau performance ?
2- Il faut gérer le faite de la limitation du nombre de fichiers par répertoire (2^32 -1), soit 4 milliards pour un disque ntfs je crois. Donc Il faudrait peut être créer des sous répertoires.
3- Je doute que le hash supporte un nombre de clés si important. Exemple:
my %LimitHash = map { $_ => 'DataColumn' } (1..50_000_000);
Engendre un Out of memory sur un PC Vista de 2Go de ram.
Merci
Partager