User since
2006-01-19
192
Artikel
BenutzerIn
Hallo mal wieder,
ich habe folgende Frage: Ich möchte meinen Server per LWP::UserAgent einige CSV-Dateien von einem anderen Server laden lassen und diese dann in eine SQL-Datenbank übernehmen.
Ich habe erste Tests gemacht und meinen Server mit einer etwa 180 MB-CSV-Datei 2 mal gekillt (Memory-Auslastung stieg langsam bis 70% und mehr und dann war er weg). Ein anderer Server (Leistungsfähiger) hat dies geschafft aber knapp eine Stunde gebraucht, wobei laut Putty die Memory-Auslastung auf knapp 50% war (der bessere Server hat 2 CPUs um 3 GHz, 2 GB RAM).
Nun war das aber nur einer der Tests. Dies war durchaus nicht die größte Datei. Die Testdatei hat 160.000 Einträge. Es gibt aber auch Dateien, die etwa 1,5 Mio Einträge haben.
Da mein besserer Server mit wichtigen Dingen beschäftigt ist, darf ich den durch Tests nicht zerschießen. Daher mal die Frage: Ist das so überhaupt möglich? Kann (m)ein Server eine 400, 600 oder 800 MB-Datei per LWP laden und diese dann in Ihre Bestandteile zerlegen und in die DB eintragen?
Habt Ihr Erfahrungswerte zur Übertragungszeit solch großer Dateien und zur Dauer des Eintragens in die DB?
Wovon hängt die "Überlebensdauer" meines Servers in diesem Falle ab? RAM, ..., oder?
Gibt es bessere Möglichkeiten, als LWP für diesen Zweck?
Dank schonmal und für heute Abend einen guten Rutsch!!
User since
2003-08-14
2022
Artikel
BenutzerIn
Wieso nimmst du nicht scp, oder rsync, oder sonst irgendwas vergleichbares?
User since
2006-01-19
192
Artikel
BenutzerIn
Ähhmm... kenne ich nicht. Habe mal kurz nachgelesen aber es scheint nicht das richtige zu sein.
Um das noch klar zu stellen: Der Server, der die Datei zum Download berei stellt, ist nicht mein Server und so kann ich hie wnig tun. Ich kann die gesamte Datei herunterladen oder nicht. Andere Optionen habe ich hier nicht.
Wenn ich das richtig verstehe, gehts also mit rsync nicht, weil ich auf dem Quellserver nichts machen / installieren/ einstellen kann.
User since
2003-08-04
2536
Artikel
ModeratorIn
mit LWP::UserAgent kannst du direkt in eine Datei speichern:
Quoteua->get( $url )
$ua->get( $url , $field_name => $value, ... )
This method will dispatch a GET request on the given $url. Further arguments can be given to initialize the headers of the request. These are given as separate name/value pairs. The return value is a response object. See HTTP::Response for a description of the interface it provides.
Fields names that start with ":" are special. These will not initialize headers of the request but will determine how the response content is treated. The following special field names are recognized:
:content_file => $filename
:content_cb => \&callback
:read_size_hint => $bytes
http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP/UserAgent.pm
User since
2006-01-19
192
Artikel
BenutzerIn
$filename = "meineDatei.txt";
ua->get( $url )
$ua->get( $url , :content_file => $filename)
also so würde ich den Arbetsspeicher frei halten oder wie meinst Du das?
User since
2006-01-19
192
Artikel
BenutzerIn
Ich habe jetzt dies probiert:
require LWP::UserAgent;
$URL="http://search.cpan.org/";
$filename="../httpdocs/ebay/userdaten/o/olruebe/test.txt";
my $ua = LWP::UserAgent->new;
$ua->timeout(20);
$ua->env_proxy;
$ua->get($URL);
$ua->get($URL, :content_file=>$filename);
geht aber nicht:
syntax error at testdownload.pl line 26, near ", :"
User since
2006-01-19
192
Artikel
BenutzerIn
LWP::Simple ist aber nicht LWP::UserAgent, oder?
LQP::Simple habe ich nicht installiert. Aber selbst wenn: Würde mir das helfen? Denn auch dann müsste die Datei ja in den Arbeitsspeicher eingelesen werden um diese dann in dei DB eintragen zu können.
Außerdem weiß ich inzwischen, dass einige csv's sogar 1,2 GB groß sind... Kann das klappen????
User since
2003-08-04
14371
Artikel
ModeratorIn
LWP::Simple und LWP::UserAgent sind beide Teil des libwww-perl-Pakets. Wenn, dann solltest eigentlich beide Pakete installiert haben.
Kleiner Test:
Wenn das ohne Fehlermeldung läuft, ist das Modul istalliert.
Musst Du die Datei in die Datenbank speichern oder reicht der Pfad zu der Datei?