Schrift
[thread]8502[/thread]

MD5 erstellen dauert sehr lange



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
zipster
 2006-11-13 17:38
#71711 #71711
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe in ein kleines Backupscript eine MD5 Erstellung und Überprüfung rein genommen. Ich habe nun ein Ordner in dem sich viele große Dateien befinden (manche Dateien sind 2.096.896 KB groß). Heute habe ich zum ersten mal einen Test laufen lassen und für 2 Dateien hat er nun über 1std. und 30min gebraucht.

So nun zu meiner Frage. Ist es normal das das so lange dauert? Und wenn ja gibt es eine alternative?

Hier der Code den ich verwende


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
sub create_md5{
    my %file_hash;
    for my $file(@files2)
    {
    
        $file =~ tr~/~\\~;
        my $md5 = Digest::MD5->new;
        open FILES, $file;
        binmode(FILES);
        while(<FILES>) { $md5->add($_); }
        my $digest = $md5->hexdigest;
        close FILES;
        $file_hash{substr($file,length($vmwarepfad))} = "$digest";
    }
    return \%file_hash
} 
...


Danke

Gruß
Seri aka Zipster
nepos
 2006-11-13 17:49
#71712 #71712
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, das hier mal versucht:
Quote
Or we can use the addfile method for more efficient reading of the file:

use Digest::MD5;

my $file = shift || "/etc/passwd";
open(FILE, $file) or die "Can't open '$file': $!";
binmode(FILE);

print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";


Aus der Doku zu Digest::MD5.
Taulmarill
 2006-11-13 18:08
#71713 #71713
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
du könntest auch ein C-Programm dafür benutzen, das ist warscheinlich schneller als das Perlmodul. auf linux währe das md5sum
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Taulmarill
 2006-11-13 18:31
#71714 #71714
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
oder auch nicht....

ich habe eben mal ein bischen auf meinem linux-server getestet. und auch wenn die benchmarks nicht aussagekräfit sind, da die last auf dem server ständig schwankt, ließ sich kein wirklich signifikanter performaceunterschied zwischen perl und md5sum ausmachen.

die zeit von eineinhalb stunden ist übrigens bei weitem zu viel. ich habe zwar nur mit einer datei von 1,3 GigaByte gearbeitet, aber die war nach max. 40 sec fertig.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
zipster
 2006-11-13 18:46
#71715 #71715
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Quote
Hm, das hier mal versucht:
Quote
Or we can use the addfile method for more efficient reading of the file:

use Digest::MD5;

my $file = shift || "/etc/passwd";
open(FILE, $file) or die "Can't open '$file': $!";
binmode(FILE);

print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";


Aus der Doku zu Digest::MD5.

Ne bringt leider keinerlei unterschied.

Quote
du könntest auch ein C-Programm dafür benutzen, das ist warscheinlich schneller als das Perlmodul. auf linux währe das md5sum


Also C-Programm kommt eigentlich nicht in Frage da das Programm Betriebsystem unabhänig bleiben soll.

Quote
die zeit von eineinhalb stunden ist übrigens bei weitem zu viel. ich habe zwar nur mit einer datei von 1,3 GigaByte gearbeitet, aber die war nach max. 40 sec fertig.


Ich hab keine Ahnung woran das liegt. Es handelt sich hier um VMWare dateien ich weiß nicht ob es damit zusammen hängt


Gibt es vieleicht noch ne andere Möglichkeit zu überprüfen ob die Dateien richtig angekommen sind?
CRC oder bitweiße überprüfung?
Taulmarill
 2006-11-13 18:53
#71716 #71716
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
du hast dir doch nicht etwa die pureperl variante von Digest::MD5 installiert, oder? das würde nämlich die schlechte performance erklären.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pq
 2006-11-13 18:56
#71717 #71717
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=zipster,13.11.2006, 17:46]CRC oder bitweiße überprüfung?[/quote]
ich würd eher die bitschwarze überprüfung vorziehen.
SCNR =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
zipster
 2006-11-13 19:11
#71718 #71718
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
Quote
du hast dir doch nicht etwa die pureperl variante von Digest::MD5 installiert, oder? das würde nämlich die schlechte performance erklären.

Doch nutze Digest::MD5. Wie soll ich es denn sonst machen?

Quote
ich würd eher die bitschwarze überprüfung vorziehen.

*G* :p
Taulmarill
 2006-11-13 19:14
#71719 #71719
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Digest::MD5 schon. es gibt aber zwei unterschiedliche versionen. eine is ausschliesslich in Perl geschrieben, die andere beinhaltet C-code. letztere ist natürlich wesendlich schneller.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
zipster
 2006-11-13 19:17
#71720 #71720
User since
2004-09-06
458 Artikel
BenutzerIn
[default_avatar]
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2006-11-13 17:38.