php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-08-2009, 11:36
ways
 Member
Links : Onlinestatus : ways ist offline
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
ways ist zur Zeit noch ein unbeschriebenes Blatt
Standard date() performancekiller ?

hi leute,

ich hab da ein mächtiges performanceproblem und würde das gerne beheben.

ich hab in einer schleife ein INSERT statement, dass derzeit testweise 200 einträge vornimmt... es werden später aber mal ca 6000 sein müssen.
Die Daten kommen aus einer CSV Datei

nun hab ich 2 werte aus der CSV mit der ich ein datum berechnen muss und das soll zusätzlich mit in die datenbank.
Der eine wert ist normales Datumsformat dd.mm.yyyy
der zweite werte stellt stunden dar, die dem Datum die Stundenangabe verleihen. Die Stundenwerte werden in 100er werten dargestellt
( 100 ist: +1 Std, 200 ist: +2Std usw)

hier der php-code aus der schleife:
PHP-Code:
// 31.01.2009 10:00 Beispiel für $DATE
$plus $stdValue*36;
$dateTimestamp  strtotime($DATE);
$utc_date date("d.m.Y H"$dateTimestamp $plus ); 
wenn ich diesen verwende brauch das script bis zu 10 mal länger, als ohne diese Umrechnung..

gibt es eine Möglichkeit mein Vorhaben anders zu realisieren?
__________________
Coder never die, they just GOSUB without RETURN

Mein System
Mit Zitat antworten
  #2 (permalink)  
Alt 19-08-2009, 11:48
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo ways,

ich vermute (nicht getestet), dass strtotime wegen seiner fast schon magischen Funktionalität recht teuer ist. Alternativ zur Berechnung in PHP könntest du doch der Datenbank das alles gleich als String mit str_to_date vor die Füße schmeißen und dafür das Format explizit angeben. Dann kümmert die sich selbst drum.

Gruß,

Anja
Mit Zitat antworten
  #3 (permalink)  
Alt 19-08-2009, 12:50
ways
 Member
Links : Onlinestatus : ways ist offline
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
ways ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das strtotime() kostet mich ca 50% der ausführungszeit.

ich kann das strtotime noch aus der schleife nehmen, weilich den ersten Datumstring ( z.b 20.01.2009 10:00 Uhr ) kenne...
aber weil ich ja dann die stunden hinzurechnen muss, brauch ich aus meinen augen das date() in der schleife, weil ich ja da erst die daten für die stunden erhalte.

Varianten:
1. mit strtotime() und date() in der schleife = 15.8 sek.
2. nur date() in der schleife nur noch 8,88 Sek Sek
3. die komplette Datumsbrechnung entfernt 1,5 Sek

das bezieht sich auf ca. 200 Inserts, wenn ich aber 6000 Inserts durchführe würde das script sagenhafte 8 Minuten benötige bei Variante 1, bei Variante 2 noch 4,5 Min. Damit wäre der Server sicher lahmgelegt. Das ganze läuft als Cronjob alle 6 Std.

wie ich das nun mit str_to_date realisiere ist mir noch nicht ganz klar.
ich habe den Datumstring (z.b 20.01.2009 10:00) und die stundenanzahl die bei jedem schleifendurchlauf raufgerechnet werden müßte... was ja schonmal ein Anfang ist... vielleicht fällt ja der groschen noch
__________________
Coder never die, they just GOSUB without RETURN

Mein System
Mit Zitat antworten
  #4 (permalink)  
Alt 19-08-2009, 12:56
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Z. B. so:
PHP-Code:
$query "insert into tabelle (datum) values (str_to_date('";
$query .= mysql_real_escape_string($DATE "/" $stdValue);
$query .= "', '%d.%m.%Y/%H%i'))"
Edit: statt %H musst du evtl. %k nehmen, wenn $stdValue ohne führende Null ankommt:
0100, 0200, ..., 2300 => %H%i
100, 200, ..., 2300 => %k%i

Geändert von AmicaNoctis (19-08-2009 um 13:00 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 19-08-2009, 12:58
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Das kann unmöglich stimmen. 200 date() Aufrufe brauchen keine 8 Sekunden. Da hast du irgendwo einen Knoten in deinem Script.
Mit Zitat antworten
  #6 (permalink)  
Alt 19-08-2009, 13:20
ways
 Member
Links : Onlinestatus : ways ist offline
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
ways ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Das kann unmöglich stimmen. 200 date() Aufrufe brauchen keine 8 Sekunden. Da hast du irgendwo einen Knoten in deinem Script.

ok, das date() allein sicher nicht, aber wie oben aus dem thread zu entnehmen, lese ich CSV Files aus, (2,6MB gross).
Aus diesem CSV filtere ich 25 Spalten für das INSERT raus, da die CSV 256 Spalten hat

1. csv öffnen
2. Bestimmte csv-spalten auslesen
3a. Datumwert und Stundenanzahl zu neuem Datum berechnen lassen
3b. Alle Spaltenwerte für INSERT String zusammensetzen

das is schon nen längerer vorgang, das problem ist, dass der Datumstring allein über alle zeilen hinweg der gleiche bleibt nur die stunden ändern sich.
Und genau das muss ich ändern,
z.B original:
wert1a = 20.01.2009
wert1b = 10:00
wert1c = 100
( = 20.01.2009 11:00)

24 zeilen weiter und somit 24 std weiter ( pro std eine zeile )
steht dort dann leider nicht
wert1a = 21.01.2009
wert1b = 10:00
wert1c = 100

sondern:
wert1a = 20.01.2009
wert1b = 10:00
wert1c = 2400

das Datum und die uhrzeit aus der CSV wiederholt sich also immer.
nur das "wert1c" ändert sich....wahnsinn, aber die daten bekomme ich so und habe null einfluss drauf.
__________________
Coder never die, they just GOSUB without RETURN

Mein System
Mit Zitat antworten
  #7 (permalink)  
Alt 19-08-2009, 13:24
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wie gesagt, ich kann mir nicht vorstellen, dass es an date() liegt. Da hats irgendwas anderes. Aber mehr weiß meine Glaskugel auch nicht.
Mit Zitat antworten
  #8 (permalink)  
Alt 19-08-2009, 13:31
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von ways Beitrag anzeigen
sondern:
wert1a = 20.01.2009
wert1b = 10:00
wert1c = 2400
Achso, dann geht es mit str_to_date leider nicht so einfach, weil der nur gültige Werte erlaubt und nicht automatisch den Überlauf verrechnet. Benutzen kannst du es trotzdem, nur halt auf diese Art:
Code:
date_add(str_to_date('15.08.2009 10:00', '%d.%m.%Y %H:%i'), interval 24 hour)
Mit Zitat antworten
  #9 (permalink)  
Alt 19-08-2009, 13:52
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

als Alternative könntest Du Dir eine Tabelle mit den 256 Spalten anlegen, die CSV per LOAD DATA INFILE dort reinschreiben und dann mit einem INSERT...SELECT mit geeignetem SELECT-Statement die Daten aus den 25 Spalten in Deine Tabelle schieben. Danach leerst Du die große Tabelle wieder, fertig.
Das sollte schneller gehen, als mit PHP 6000 Zeilen durchzunudeln und 6000 einzelne INSERTs abzusetzen.

LG
Mit Zitat antworten
  #10 (permalink)  
Alt 19-08-2009, 13:56
ways
 Member
Links : Onlinestatus : ways ist offline
Registriert seit: Nov 2003
Ort: Berlin-West :-)
Beiträge: 386
ways ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok, etwas licht am horizont,
da bei mir ja jeder eintrag eine stunden mehr, als das ausgangsdatum bedeutet, könnte ich das ganze nicht komplett kürzen mit sowas wie
DATE_ADD(beginn, INTERVAL 1 Hour) ?
__________________
Coder never die, they just GOSUB without RETURN

Mein System
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
date und php 5.2 Kropff PHP Developer Forum 2 01-12-2006 12:28
Warning: date() [function.date]: Unexpected error voodoo PHP Developer Forum 1 08-08-2004 18:50
date between binaer SQL / Datenbanken 23 19-03-2004 11:39
date minus date firebirder SQL / Datenbanken 1 10-03-2004 18:11
was ist der unterscheid zwischen date("m"); und date("n"); ? uschi PHP Developer Forum 8 07-05-2003 16:58

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:21 Uhr.