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 08-06-2009, 17:49
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard PDO und hochkomplexe SQL-Abfragen

Eine Frage dazu. Hat irgend jemand von euch schon schlechte Erfahrungen mit PDO gemacht, wenn die Abfragen richtig heftig waren? Also die berühmten 100-Zeilen-Abfragen. Mehrfache JOINS, mehrere UNIONS und so weiter und so fort. Habe auch gelesen, dass PDO keine vernünftige numrows unterstützung hat. Gibt es sonst noch Kritikpunkte daran?

Zur Info. Wir stellen gerade eine Anwendung um und möchten mehr Datenbanken unterstützen als nur MySQL. Aber wie ich schon sagte, ein Teil der Logik basiert auf diesen Monsterabfragen. Und wenn PDO da Schwächen hat, können wir es nicht nutzen.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #2 (permalink)  
Alt 08-06-2009, 17:59
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Nee, nicht wirklich..
Meist nutze ich PDO nur indirekt, wegen der fehlenden SQL Abstaktion. Das grenzt die Portabilität doch ganz schön ein. Doctrine bietet da einiges "mehr" und setzt auf PDO auf.

Einmal sind mir "Memory Leaks" aufgefallen. Das war allerdings ein Dauerläufer Script und die Probleme traten erst nach Stunden auf. Dürfte für Webanwendungen also nicht relevant sein.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 08-06-2009, 18:05
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Da bin auch gerade am recherchieren. Ob nun Doctrine oder Propel. Wie gut ist denn die Abstraktionsschicht von doctrine?

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #4 (permalink)  
Alt 08-06-2009, 18:13
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wie gut?
Gewöhnungsbedürftig, aber genial!
Ich bin bisher noch nicht an Grenzen gestoßen.

Das meiste versuche ich mit Templates und dem "actAs" Konzept abzuhandeln.
Aber auch das DQL ist relativ leicht zu nutzen.

Versuchs doch einfach mal.....
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 08-06-2009, 18:16
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Versuchs doch einfach mal.....
Also einfach mal versuchen, dürfte bei diesem Projekt ein wenig heikel sein. Da müssen wir uns vorher entscheiden.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #6 (permalink)  
Alt 08-06-2009, 18:21
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ich meine mehr "warmlaufen" und "gewöhnen". Ein paar Modelle anlegen und deine fetten Querys testen. Dann siehste auch wie performant das wird.
Ohne Probelauf, würde ich die Entscheidung nicht fällen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #7 (permalink)  
Alt 08-06-2009, 18:36
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

ich schau mal. danke dir.

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #8 (permalink)  
Alt 08-06-2009, 19:06
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Als gute Alternative zu Doctrine ist noch Zend_Db_Table zu erwähnen. Nicht ganz so umständlich mit den Yaml-Dateien, abstrahiert dafür aber auch nicht bis auf eigene Modelklassen sondern nur auf Datensatzebene, diese verfügen aber auch über Funktionen wie save, delete, update, etc. Weiter hast du mit den Statement-Klassen etwas ähnliches wie DQL. Wenn du eh das Zend-Framework nutzt, die bessere Alternative, da du dir damit auch eine Projektabhängigkeit zu Doctrine sparen kannst.
Mit Zitat antworten
  #9 (permalink)  
Alt 08-06-2009, 20:28
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

also ich glaube für die einarbeitung in zend fehlt uns die zeit. ein paar von uns (einschließlich meine wenigkeit) haben sich damit schon beschäftigt. aber ob uns für eine komplette einarbeitung genug zeit bleibt, ist fraglich. außerdem neigen frameworks dazu, nicht besonders performant zu sein. und das ist hier besonders wichtig.

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #10 (permalink)  
Alt 08-06-2009, 20:55
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Peter, Framework oder nicht, jeder Abtract Layer ist langsamer als direkt, dafür ist es bequemer. Du mußt schon das kleinere Übel für dein Projekt in Kauf nehmen. Also entweder alle Module einzeln je nach DBMS schreiben und bei Bedarf einsetzen/austauschen, oder allgemeine Module für alle unterstützten DBMS dafür aber etwas langsamer. Was für euch das kleinere Übel ist, müßt ihr wissen
Mit Zitat antworten
  #11 (permalink)  
Alt 08-06-2009, 21:08
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von asp2php Beitrag anzeigen
Also entweder alle Module einzeln je nach DBMS schreiben und bei Bedarf einsetzen/austauschen ...
Aber liegt hier nicht genau einer der Vorteile von PDO? Die Abstraktion fällt doch komplett weg. Zudem dürfte PDO um einiges schneller laufen als jede in PHP programmierte Datenbank-Klasse oder ein PHP Framework, da PDO direkt in C geschrieben ist und nicht erst über PHP kompiliert werden muss.

Ich persönlich setze PDO unter anderem in einem Kundenverwaltungstool mit nun mehr als 400.000 Datensätzen und einem Db Volumen von knapp 2GB ein. Darunter auch sehr komplexe Abfragen mit mehreren Joins, SubSelects, etc.

Das mit der fehlerhaften Handhabe von numrows ist so eine Sache. Sofern es sich nicht um ein Select Query handelt, funktioniert das PDOStatement::rowCount() ohne Probleme. Bei Select Queries habe ich mir angewöhnt mit SELECT COUNT(*) zu arbeiten.. Hierin sehe ich aber auch kein grundlegendes Problem, welches PDO unattraktiver macht.

Also ich kann es aus Erfahrung raus nur empfehlen und bin hier auf noch keine größeren Probleme gestoßen.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #12 (permalink)  
Alt 08-06-2009, 21:26
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ezkimo Beitrag anzeigen
Ich persönlich setze PDO unter anderem in einem Kundenverwaltungstool mit nun mehr als 400.000 Datensätzen und einem Db Volumen von knapp 2GB ein. Darunter auch sehr komplexe Abfragen mit mehreren Joins, SubSelects, etc.
Bei uns wird es wohl noch einges mehr werden. Die aktuelle Anwendung umfasst etwa 20 GB in der DB. Und die Anzahl der Datensätze ist auch viel, viel größer.
Zitat:
Zitat von asp2php Beitrag anzeigen
Peter, Framework oder nicht, jeder Abtract Layer ist langsamer als direkt, dafür ist es bequemer. Du mußt schon das kleinere Übel für dein Projekt in Kauf nehmen. Also entweder alle Module einzeln je nach DBMS schreiben und bei Bedarf einsetzen/austauschen, oder allgemeine Module für alle unterstützten DBMS dafür aber etwas langsamer. Was für euch das kleinere Übel ist, müßt ihr wissen
Naja, die Performance ist das Wichtigste. Da werden wir wohl in den sauren Apfel beißen müssen.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #13 (permalink)  
Alt 08-06-2009, 21:34
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ezkimo Beitrag anzeigen
Aber liegt hier nicht genau einer der Vorteile von PDO? Die Abstraktion fällt doch komplett weg. Zudem dürfte PDO um einiges schneller laufen als jede in PHP programmierte Datenbank-Klasse oder ein PHP Framework, da PDO direkt in C geschrieben ist und nicht erst über PHP kompiliert werden muss.
Zend_Db_Table setzt ja erst auf PDO (unter anderem, Zend_Db kann auch zum Beispiel die mysql-Extension ohne PDO nutzen) auf. Was man noch machen könnte wäre, alle SQL-Statements auszulagern und über einen kleinen Wrapper dynamisch über IDs zu laden. Das Binden von Parametern geschieht ja über die bind*-Methoden. Sowas in die Richtung:
PHP-Code:
class MyPDO {
private 
$_sqlDir;
private 
$_pdo;
public function 
prepareQuery($id) {
    if(
$this->_cache===NULL) {
        
$db=$this->_pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
        
$file=$this->_sqlDir.$db.'.php';
        if(!
is_file($file)) {
            throw new 
FileNotFoundException('File '.$file.' not found');
        }
        
$this->_cache=include $file;
    }
    if(!isset(
$this->_cache[$id])) {
        throw new 
InvalidArgumentException('No query for id '.$id.' found');
    }
    return 
$this->prepare($this->_cache[$id]);
}
}

$db=new MyPDO(/*...*/'/path/to/queries/');
$stmt=$db->prepareQuery('MyQueryID'); 
Mit Zitat antworten
  #14 (permalink)  
Alt 09-06-2009, 13:56
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Der Ansatz ist sicherlich gut. Ich bin mir jetzt aber nicht ganz sicher, ob das interne Caching bzgl. der prepared Statements diesen Job nicht ohnehin übernimmt:
Zitat:
Zitat von Manual
Calling PDO:repare() and PDOStatement::execute() for statements that will be issued multiple times with different parameter values optimizes the performance of your application by allowing the driver to negotiate client and/or server side caching of the query plan ...
Sicherlich bezieht sich dieser Teil auf die Festsetzung des Statements während der Laufzeit. Die Frage wäre jetzt, ob dies auch über die Laufzeit eines Scripts hinaus gilt?
__________________
MM Newmedia | MeinBlog
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
MySQL 5 Viele Abfragen zu vielen Daten gleichzeitig abfragen netterkerl1981 SQL / Datenbanken 3 22-01-2007 17:39
user daten per join abfragen und gleichzeitig black/whitelist abfragen? westberlin SQL / Datenbanken 10 07-12-2005 17:32
URL Abfragen Sipart PHP Developer Forum 2 08-09-2004 19:53
ssi if-Abfragen auf iis jetrider2k HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 3 25-08-2003 15:50
Gewichtete Abfragen SQL-Abfragen Berni Tutorials 0 12-03-2002 22:10

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:31 Uhr.