php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.12.2010, 11:50  
Neuer Benutzer
 
Registriert seit: 09.08.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
mr.nice befindet sich auf einem aufstrebenden Ast
Standard Performance Fragen

Hallo,

ich sitzte gerade an einer größeres Softwarelösung. Das ganze Arbeitet sehr viel mit Reflection.

Das nur zur Vorgeschichte.

Jetzt bin ich an einem Punkt angekommen, an dem ich einige Dinge optimieren muss, um die Datenbankabfragenanzahl gering zu halten.
Dafür muss ich natürlich irgendwas schlaues basteln bzw. Daten cachen etc.

Die Frage(n):

Was ist effektiver:

a)
PHP-Code:
$myCache[$propName][$rowId] = $myHelper->HoleMirDasLabel(...);
//hier wird also evt. ein Eintrag überbraten und $myHelper->HoleMirLabel(...) unötigerweise ausgeführt 
b)
Vorher array_search_key oder ähnliches in einer If-Abfrage. Wenns den Key schon gibt, keine Ausführung des "HoleMirLabel".
Der Key wäre hier $rowId und $propName wäre an der stelle des Codes schon bekannt.

Sprich ich müsste im array $myCache[$propName] nach dem Key $rowId suchen...

Die Funktion "HoleMirLabel" behinhaltet lediglich etwa sowas:
PHP-Code:
class MyClass{

public 
$Name
public $Kundennummer

public HoleMirLabel()
{
    return 
$this->Name." (".$this->Kundennummer.")";
}


Kann mir da jemand auf die schnelle einen guten Link nennen?

Oder kennt jemand gute Testmethoden außer "echo microtime();"

Naja also generell wäre es gut wenn mir einer sagen kann ob die array funktionen von php zuverlässig und schnell arbeiten. So eine Suche könnte bis zu 100 Einträge beinhalten, in den aber jeweils nur nach dem Key gesucht wird.

Bei zb SQL macht es ja kaum unterschied, ob ich in 200.000 Einträgen nach einem Index suche oder in 10... also jedenfalls hab ich da fürs Menschenauge bzw die Sekundenstoppuhr "time()" keine Unterschiede gesehen.

Legt PHP da auch irgendwelche Indextabellen an intern?

Falls jemand Rat weiß, wäre ich sehr dankbar!!

Geändert von mr.nice (08.12.2010 um 12:16 Uhr).
mr.nice ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.12.2010, 12:14  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Wo ist den nun dein Performance-Problem?

Übermässige Reflection?
Problem Queries?
Zuviele mini Queries?
Zuviele Methoden aufrufe?

Zitat:
Oder kennt jemand gute Testmethoden außer "echo microtime();"
Ja ein Profiler... kostenlos z.B. xdebug mit KCacheGrind.
erc ist offline   Mit Zitat antworten
Alt 08.12.2010, 12:29  
Neuer Benutzer
 
Registriert seit: 09.08.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
mr.nice befindet sich auf einem aufstrebenden Ast
Standard

oh das ging ja fix.

Also generell ist das Probelm tatsächlich viele miniQueries rausbekommen.

Bei vielen Feldern könnte ich die Information direkt mit ziehen, dann wäre aber die Verteilung wieder recht komplex und demnach viel Logik nötig.
Wenn ich aber Felder habe, in den mehre Verweise stehen, dann geht das nicht mehr, soweit ich weiß. Oder kann ich mit zu jeder Zeile auch noch ein zusammengebautet Objekt mitziehen? Das wäre natürlich die Optimallösung.

Das ganze sieht so aus: Manche Felder in einer SQL Tabelle sind ja meistens Verweise auf andere Datansätze. So und da will der Benutzer natürlich nicht die ID sehen sonder eben meinetwegen den Namen des Kunden plus Kundennummer. Sprich, ich muss für jedes Feld, dass ein Beziehungsfeld ist, eine Abfrage machen.

Bei ner Ergebnissmenge von 50 Datensätzen mit etwa jeweils 4 beziehungsfeldern sind das 200 miniqueries.

Ich bin da noch zu unerfahren, ist das generell eigentlich überhaupt ein Problem? Also schnell gehen tuts jedenfalls, ich frage mich nur was passiert, wenn da viele User gleichzeit andauernt 200 Minqueries schicken...

DB Server und Webserver sind entweder beide auf der gleichen Maschine oder über Netzwerk "schnell" verbunden...

Zitat:
Zitat von erc Beitrag anzeigen
Wo ist den nun dein Performance-Problem?
Ja ein Profiler... kostenlos z.B. xdebug mit KCacheGrind.
XDebug hab ich schon an, wo kann ich da genau schauen? Komme aus der .Net Welt und bin noch nicht soo lange mit dem xDebugging unterwegs

Geändert von mr.nice (08.12.2010 um 12:39 Uhr).
mr.nice ist offline   Mit Zitat antworten
Alt 08.12.2010, 12:48  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von mr.nice Beitrag anzeigen
Bei ner Ergebnissmenge von 50 Datensätzen mit etwa jeweils 4 beziehungsfeldern sind das 200 miniqueries.
JOINs sind dir ein Begriff?

Zitat:
Zitat von mr.nice Beitrag anzeigen
XDebug hab ich schon an, wo kann ich da genau schauen? Komme aus der .Net Welt und bin noch nicht soo lange mit dem xDebugging unterwegs
Einfach mal googlen. Das ist nicht sonderlich schwer. Xdebug erzeugt für jeden aufruf eine Datei mit einem Log, das Log kann man dann mit kcachegrind auswerten.
erc ist offline   Mit Zitat antworten
Alt 08.12.2010, 12:58  
Neuer Benutzer
 
Registriert seit: 09.08.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
mr.nice befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von erc Beitrag anzeigen
JOINs sind dir ein Begriff?
Die Abragen laufen schon längst mit Join, jedenfalls die eingrenzung des Datensatzen, sprich die Suche selbst.

Wie schon geschrieben, bei Feldner wie "Erstellt von" oder so ist das natürlich mittels Join kein Problem.

Was ist aber mit einem Feld wie "Kunden" in dem die ids der Kunden mit Komma getrennt stehen? Suchen und so kann man ja prima mit

"SELECT tabelle t .... WHERE 4 IN (t.Kunden)"

Wenn ich jetzt aber quasi sowas machen wollte:

"Select t.*, Kundenobjektiste WHERE ...."

Da ist die Frage ob das überhaupt mit einer Query geht??
mr.nice ist offline   Mit Zitat antworten
Alt 08.12.2010, 13:04  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von mr.nice Beitrag anzeigen
Was ist aber mit einem Feld wie "Kunden" in dem die ids der Kunden mit Komma getrennt stehen?
Das ist schlicht und einfach fehlerhafte Datenmodellierung.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 08.12.2010, 13:22  
Neuer Benutzer
 
Registriert seit: 09.08.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
mr.nice befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Das ist schlicht und einfach fehlerhafte Datenmodellierung.
Ja, dass hab ich mir auch schon gedacht. Natürlich war das mit den Kunden auch ein dummes Beispiel.

Nehmen wir mal lieber ne Produktliste die an einer Bestellung hängt.

WIe macht man sowas schlau??
mr.nice ist offline   Mit Zitat antworten
Alt 08.12.2010, 13:38  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Stichwort Normalisierung.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 08.12.2010, 13:54  
Neuer Benutzer
 
Registriert seit: 09.08.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
mr.nice befindet sich auf einem aufstrebenden Ast
Standard

ich danke das kann geschlossen werden. ich hab mich wohl etwas unpräzise ausgedrückt, aber das Stichwort Normalisierung wars letztendlich..

Danke für die Hilfe
mr.nice ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Performance Fragen jwka61 PHP Tipps 2010 7 17.11.2010 19:48
MySQL - 2 verschiedene Datenbanken - Performance?! jGeee Datenbanken 1 24.04.2009 18:13
ein paar Fragen (wegen eines Loginhistory) Ninos PHP Tipps 2009 5 04.04.2009 14:59
Renommee Funktion wirft Fragen... tomtaz Board-Support 11 02.07.2008 21:18
gettext, einige fragen notyyy PHP Tipps 2008 12 01.05.2008 12:09
MySQL Performance cycap Datenbanken 14 03.04.2007 21:47
ImageMagick Performance Problem M3g4Star PHP Tipps 2006 1 30.11.2006 09:35
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Vererbung von Klassen und Performance ggfan PHP Tipps 2006 5 05.03.2006 12:00
[Erledigt] Performance Fragen zu PHP4/OOP und SOAP RPC Webservice PHP-Fortgeschrittene 4 26.05.2005 14:35
Generelle PHP Fragen Madden PHP-Fortgeschrittene 3 11.04.2005 01:24
[Erledigt] Allgemeine Anfänger Fragen PHP Tipps 2004-2 5 20.12.2004 14:57
Fragen über Fragen :) Igäl PHP Tipps 2004 3 26.08.2004 08:59
[Erledigt] Fragen über Fragen... wer kann helfen? PHP Tipps 2004 2 08.07.2004 21:12


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum