[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: xargs für url-listen?



Michelle Konzack wrote:

machen, was ja auch anständig funktioniert, solange die liste nicht
mehr als 1500 locale pfade hat die gegen die Datei in der URLS
gespeichert wurden gecheckt wird

Hmm, was Du da haben willst ist einfach eine Liste aller URLs die noch nicht in $LISTE sind, aber in $DATEI stehen? Wo ist da das Problem? Wenn ich mich in den Postings richtig erinnere, programmierst Du und nutzt auch PostgreSQL.

Lösungsvorschlag a)

Anstelle einer Liste mit den URLs als Expression einfach eine weitere Liste, sort + diff = fertig.

Lösungsvorschlag b)

Kurzes (Python|Perl|Java|whatecer)-Skript geschrieben, die $DATEI mit den URLs komplett einlesen und alle Einträge anhand der $LISTE daraus entfernen.

Lösungsvorschlag c)

PostgreSQL nehmen, zwei Tabellen für die beiden Listen erstellen, alle URLs hineinschreiben. Okay, dafür sind Datenbanken sicher nicht gedacht, aber möglich wäre es (vorallem wenn man noch zusätzliche Informationen verwalten kann/will). Dann einen Query in der Form:

select url from url1 except select url from url2;

Lösungsvorschalg d)

'Richtiges' Programm mit 'guter' Datenstrukturschreiben wenns noch halbwegs schnell sein soll.

Die Frage ist nun, wie würdet ihr das am besten lösen?

NICHT in Umgebungsvariablen der Shell. Sonst mit kurzem Nachdenken, 5 Minuten Arbeit und etwas Warten.

$DATEI ist übrigends eine Liste von URLS die ich überwachen, bzw.,
runterladen will und $LISTE mein localer Cache.

Soviel Überwachung lässt mich an gewissen "Three-Letter-Agencies" denken...

Rechenleistung, Speicher und Internetanbindung sind kein Problem.

... und das erst recht :-) Auch wenn man bei der Größe da noch nicht an ein Problem stossen sollte, Ergebnis einer kleinen Fingerübung:

-- SNIP --
ifjke@caruso:~$ python urltest.py LISTE DATEI DIFF
urltest.py <list1> <list2> <out>

reading first file entirely into memory...
9799524 lines from LISTE read so far...
walltime: 18.495s cputime: 17.090s
reading second file by line and compare...
9999999 lines from DATEI compared so far...
walltime: 22.473s cputime: 19.240s
sorting results...
walltime: 0.490s cputime: 0.480s
writing results to output file...
200475 lines wrtitten to DIFF so far...
walltime: 3.289s cputime: 0.460s
ifjke@caruso:~$ cat DATEI | wc -l
9999999
ifjke@caruso:~$ cat LISTE | wc -l
9799524
ifjke@caruso:~$ cat DIFF | wc -l
200475
ifjke@caruso:~$
-- SNIP --

Testdaten waren fast 10 Millionen künstlich generierte URLs in $DATEI, $LISTE als echte Teilmenge davon mit ca. 2% weniger Einträgen, die URLs waren jedoch kurz (http://foo/bar/70563/72992/87713/13210/foobar.html).

Ich behaupte das geht noch wesentlich schneller und eleganter (will vorallem meinen etwas weniger speicherlastig), wenn die Listen beide sortiert vorliegen, wenn sie nicht mehr ins RAM passen. Da braucht es dann aber mehr als die zehn Minuten, die ich mir genommen hab :-)

Cheers,
Jan



Reply to: