Uz malu modifikaciju (0.5 umesto 2 miliona iteracija, ali se md5 hash sece na 4 dela - iako bi moglo na jos vise delova - pa se u jednoj iteraciji dobiju 4 key-a umesto jednog) skripta radi nesto brze. Ukupno zauzece memorije je manje od 30mb (negde oko 25-27) za perl i sort zajedno. Propustanjem unique key-eva kroz "wc -l" dobije se da je broj duplikata uvek manji od 0.025%, sto je verovatno zadovoljavajuce, uz vreme izvrsavanja manje od 15 sekundi (sa sve sortiranjem).
Ja sam uvek pre za Perl kada je iole veca kolicina podataka u pitanju - posebno ako treba nesto da se parsuje
Eve ga i kod ako nekog zanima..
Kôd:
use Digest::MD5 qw/md5_hex/;
use Time::HiRes qw/gettimeofday/;
my $i = 0;
while( $i++ < 500_000 )
{
my ( $m, $ms ) = gettimeofday;
my $code = md5_hex( $m / rand( $ms ) );
printf(
"%s\n"x4,
substr( $code, 0, 8 ),
substr( $code, 8, 8 ),
substr( $code, 16, 8 ),
substr( $code, 24, 8 )
);
}
A rezultat izvrsavanja...
Kôd:
$ time perl rand.pl | sort -u | wc -l
1999556
real 0m14.923s
user 0m14.129s
sys 0m0.460s