Schrift
[thread]870[/thread]

LWP für eine 400MB CSV-Datei.: kann das gehen...?

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
olruebe01
 2006-12-31 20:45
#9431 #9431
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
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!!
Ronnie
 2006-12-31 21:21
#9432 #9432
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wieso nimmst du nicht scp, oder rsync, oder sonst irgendwas vergleichbares?
olruebe01
 2006-12-31 21:33
#9433 #9433
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Ä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.
jan
 2006-12-31 22:02
#9434 #9434
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit LWP::UserAgent kannst du direkt in eine Datei speichern:
Quote
ua->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
olruebe01
 2006-12-31 22:12
#9435 #9435
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
$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?
olruebe01
 2006-12-31 22:47
#9436 #9436
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Ich habe jetzt dies probiert:
Code: (dl )
1
2
3
4
5
6
7
8
9
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 ", :"
esskar
 2007-01-01 03:15
#9437 #9437
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
pod lesen hilft. ;)
renee
 2007-01-01 14:45
#9438 #9438
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Stichwort: getstore von CPAN:LWP::Simple
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
olruebe01
 2007-01-03 04:50
#9439 #9439
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
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????
renee
 2007-01-03 10:51
#9440 #9440
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
LWP::Simple und LWP::UserAgent sind beide Teil des libwww-perl-Pakets. Wenn, dann solltest eigentlich beide Pakete installiert haben.

Kleiner Test:
Code: (dl )
perl -MLWP::Simple -e 1


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?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2006-12-31 20:45.