2009-03-06 7 views
2

Wir arbeiten an einem PHP-Projekt, das seit mehr als 2 Jahren in Entwicklung ist, und nun ist das Team bereit und fühlt sich bereit, die Entwicklung auf ein ORM umzustellen. Weil es die Entwicklung wirklich beschleunigt und es Ihnen erlaubt, mit Objects zu arbeiten und nicht zu sehr in SQL-Code und Datenbanktabellen zu denken.Wie fügt man ORM zu einem älteren PHP-Projekt hinzu?

Wir haben uns entschieden, das Doctrine ORM zu wählen, weil es YAML-Datasets lädt - wir brauchen es sehr für unsere Unit-Tests.

Die Hauptangst, die ich habe, ist, dass die Verwendung eines neuen ORM-Frameworks die Leistung der Site verlangsamen kann. Wir können keine gemeinsame Verbindung zwischen der aktuellen Datenbankabstraktionsschicht herstellen (die pg_connect Syntax verwendet, nicht PDO -kompatibel). Der Datenbankverbindungsmechanismus kann nicht auf PDO-kompatibel umgeschaltet werden, da viele SQL-Codes mit der PDO_SQLITE-Syntax inkompatibel sind.

Also, wie ich es verstehe, wenn wir anfangen, es zu benutzen, wird es die Anzahl der Datenbankverbindungen verdoppeln. Ich bin mir nicht sicher, ob der Datenbankserver damit umgehen kann.

Was würden Sie uns in diesem Fall empfehlen?

Antwort

1

Welche Relevanz hat PDO_SQLITE?

Sofern Sie nicht wirklich den SQLite-Treiber verwenden möchten, ist die Kompatibilität nicht durch PDO vorgeschrieben.

Wenn Sie nicht SQLite verwenden, würde ich die Legacy-Datenbankschicht PDO kompatibel machen und die Verbindungen wiederverwenden, bis Sie vollständig zu Doctrine migrieren können.

Das heißt, das Niveau der Verbindungen wird nicht Ihr einziger Leistungsbedenken beim Umzug in ein ORM sein. Sie sind von Natur aus ineffizient, sodass ich langsamere Abfragen, eine höhere Bandbreite zwischen Anwendungsservern und Datenbankservern und eine höhere Speicherauslastung auf Anwendungsebene erwarten würde, da redundante Daten zwangsläufig ausgewählt werden. Abhängig von Ihrer aktuellen Konfiguration können die oben genannten Probleme auftreten.

Sie sollten diesen letzten Absatz wahrscheinlich mit einer Prise Salz nehmen, denn sie sind nur Merkmale von ORMs im Allgemeinen und nicht von Doktrinen im Besonderen, mit denen ich keine Erfahrung hatte.

1

Die offensichtliche Sache, die Sie tun können, ist nicht eine Datenbankverbindung zu öffnen, bis Sie es brauchen. Ich persönlich verwende Code wie folgt:

, um die Menge der sich wiederholenden zu reduzieren und nur eine Verbindung zu öffnen, wenn Sie eine benötigen.

In Ihrem Fall müssen Sie dann den kleinsten Brocken abbrechen, mit dem Sie beginnen können. Idealerweise sollte es eine vertikale Scheibe sein, was bedeutet, dass diese Scheibe fast alle ihre Datenbank-Arbeit mit dem neuen Code und sehr wenig mit dem alten tun wird. Auf diese Weise können Sie Datenbankverbindungen minimal verdoppeln und dadurch können Sie einige Fähigkeiten aufbauen und etwas Erfahrung sammeln.

Vorsicht, ORM ist keineswegs ein Allheilmittel. Sie mögen SQL hassen und es findig und fehleranfällig finden, aber Sie handeln größtenteils nur eine Reihe von Problemen für eine andere. Ich persönlich denke, dass, während ORM nützlich sein kann, es überhöht wurde und mehr eine falsche Wirtschaft ist, als viele entweder erkennen oder bereit sind zuzugeben. Ich schrieb mehr darüber in Using an ORM or plain SQL?

Ich sage nicht, dass Sie es nicht tun sollten.Denk einfach nicht daran, dass es all deine Probleme lösen wird. Da diese Neuschreibung die Funktionalität überhaupt nicht ändert (von dem, was Sie beschrieben haben), bin ich mir nicht sicher, ob die Kosten dafür günstiger sind als das, was bereits da ist. Zu viele Unbekannte, um zu sagen, in welche Richtung deine Situation gehen wird.

0

Nun, ja und nein - Ihre DB-Verbindungen werden nur verdoppelt, solange Sie sowohl eine Nicht-PDO- als auch eine PDO-Verbindung haben.

Ich bin mir nicht sicher, was Sie mit der PDO_SQLITE-Referenz meinen, da SQLite eine völlig andere Datenbank ist als die PostgreSQL, die Sie jetzt zu verwenden scheinen.

Sie sollten in der Lage sein, Ihre aktuellen Abfragen über PDO :: query so wie Sie heute tun, wenn Sie etwas sehr falsch machen :)

Verwandte Themen