phpbar.de logo

Mailinglisten-Archive

[php] Benchmarks (was: 50.000 records von XML nach SQL)

[php] Benchmarks (was: 50.000 records von XML nach SQL)

andreas kempf php_(at)_phpcenter.de
Thu, 26 Jul 2001 12:24:27 +0200


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