Mailinglisten-Archive |
On Fri, 06 Jul 2001 13:11:39 +0200, andreas kempf aka 'amalesh'
<andreas.kempf_(at)_amalesh.de> wrote:
Vor 3 wochen war das folgende hier thema, inzwischen habe ich die zeit
gefunden ein paar benchmarks zu machen...
>>> Nun gibt es zwei ansaetze, um die sql-queries auszufuehren:=20
>>> - Innerhalb der schleife, die die 50.000 datensaetze einliest, pro
>>> record ein mysql_query() absetzen oder=20
>>> - zunaechst die 50.000 queries in eine datei schreiben und die
>>> queries dann per exec("mysql < datei.sql") ausfuehren.
>>
>>> Was zufaellig jemand, welche der varianten ressourcen-schonender
>>> (billiger, schneller) ist?
>>Ich w=FCrde die zweite Variante mit sofortigem fwrite vorschlagen. Die
>>Vorteile sind:
>>
>>- weniger Speicherverbrauch durch direktes schreiben
>>- h=F6here Geschwindigkeit des Kommandozeilentools
Die verwendete XML-datei hatte keine 50.000 datensaetze, sondern nur
16.800 enthalten.=20
Um die XML-daten nach MySQL zu bekommen wurde zunaechst per fgets()
die datei eingelesen, dann xml_parse_into_struct() in einer schleife
verwendet, die dann die sql-statements zusammenbaut und via
mysql_query() ausfuehrt.=20
Alternativ habe ich die gleiche vorgehensweise verwendet, jedoch
komplett ohne interaktion mit MySQL (alle mysql-funktionen
auskommentiert).
Test-System I:
Duron 750, 256 MB RAM, Raid0 (NTFS)
Win2K, MySQL 3.23.37, Apache 1.3.20, PHP3
xml_parse_() & mysql_() | nur xml_parse_()
Lauf 1: 356 sec | 314 sec
Lauf 2: 488 sec | 363 sec
Lauf 3: 556 sec | 398 sec
Seltsam sind hier die ansteigenden zeiten bei jedem durchlauf. Die
ursache konnte ich nicht finden. Erwartet haette ich sinkende zeiten
fuer jeden durchlauf...
Test-system II:
Pentium III 700, 64 MB RAM, Raid5
Linux 2.2.16-22, MySQL 3.23.22, Apache 1.3.20, PHP 4.0.6
xml_parse_() & mysql_() | nur xml_parse_()
Lauf 1: 70 sec | 59 sec
Lauf 2: 68 sec | 59 sec
Lauf 3: 68 sec | 59 sec
Die zeit-unterschiede zwischen beiden varianten finde ich nicht
besonders kritisch. Im gegenteil, sie sind so gering, dass ich eine
dritte variante, die statt mysql_() erst via fwrite() die query in
einer datei speichert um sie dann ueber die shell direkt an mysql zu
pipen, erst gar nicht begonnen habe. :)
Sehr ueberrascht hat mich jedoch der zeitunterschied von rund 500%
zwischen beiden test-systemen.=20
ciao, andreas
--=20
[amalesh] | backend - development | PHP ASP SQL
andreas kempf | http://www.amalesh.de | online-shops
barnerstr. 14 | tel: 040 - 39834682 | eventsysteme
22765 hamburg | info_(at)_amalesh.de | communities
php::bar PHP Wiki - Listenarchive