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