Frage

Wir arbeiten an einem PHP-Projekt, das seit mehr als 2 Jahren in der Entwicklung gewesen, und jetzt das Team ist bereit, und die Bereitschaft, fühlen sich die Entwicklung auf einen ORM zu wechseln. Weil es wirklich die Entwicklung beschleunigt und ermöglicht es Ihnen, nach Objekten zu arbeiten und denken nicht in dem SQL-Code und Datenbanktabellen der meisten Zeit.

Wir haben beschlossen, die Lehre ORM zu wählen, weil es YAML hat Daten Armaturen laden - wir für unsere Komponententests ist es sehr viel brauchen

.

Die Haupt Angst ich habe, ist, dass ein neuer ORM-Framework kann die Website-Leistung verlangsamen. Wir können nicht eine gemeinsame Verbindung zwischen den aktuellen Datenbank-Abstraktionsschicht machen (die pg_connect Syntax verwendet, nicht PDO -kompatiblen). Der Datenbankverbindungsmechanismus kann nicht auf PDO-kompatibel geschaltet werden, weil es viele SQL-Code nicht mit PDO_SQLITE Syntax sind.

So, wie ich es verstehe, wenn wir es mit beginnen werden, wird die Anzahl der Datenbankverbindungen verdoppeln. Ich bin nicht sicher, ob Datenbankserver der Lage sein wird, dies zu umgehen.

Was würden Sie uns empfehlen in diesem Umstand zu tun?

War es hilfreich?

Lösung

Von dem, was relevant ist PDO_SQLITE?

Es sei denn, Sie planen, tatsächlich über die Verwendung der SQLite-Treiber dann ist die Kompatibilität nicht von PDO vorgeschrieben ist.

Wenn Sie vorhaben, nicht SQLite verwenden, dann würde ich die Legacy-Datenbankschicht PDO kompatibel machen und Wiederverwendung die Verbindungen, bis Sie voll auf Lehre migrieren kann.

Das heißt, die Höhe der Verbindungen ist nicht Ihre einzige Leistung Anliegen zu einem ORM zu bewegen sein wird. Sie sind von Natur aus ineffizient, so würde ich langsame Abfragen erwarten, höhere Nutzung der Bandbreite zwischen Anwendungsserver und den Datenbankservern und höherer Speichernutzung auf der Anwendungsebene durch redundante Daten zwangsläufig ausgewählt zu werden. Je nach Ihrem aktuellen Setup kann die oben oder nicht Fragen.

sollten Sie nehmen wahrscheinlich den letzten Absatz mit einer Prise Salz aber, weil sie nur Züge ORMs im Allgemeinen und nicht Lehre insbesondere sind, mit denen ich keine Erfahrung hätte.

Andere Tipps

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

public function connect() {
  if (!defined('CONNECT')) {
    mysql_connect(...);
  }
}

public function db_query($query) {
  connect();
  $ret = mysql_query($query);
  if (!$ret) {
    die(mysql_error());
    error_log(mysql_error() . ' - ' . $query);
  }
  return $ret;
}

, um die Menge an repetitiven zu reduzieren und nur eine Verbindung zu öffnen, wenn man einen braucht.

In Ihrem Fall Sie dann müssen die kleinsten Brocken Sie können abbrechen zu beginnen. Im Idealfall soll es eine vertikale Scheibe sein, diese Scheibe bedeutet, werde mit dem neuen Code fast alle seiner Datenbank Arbeit tun und nur sehr wenig mit dem alten. Auf diese Weise können Sie minimale Verdoppelung der Datenbankverbindungen und auf diese Weise können Sie einige Fähigkeiten aufbauen und auch etwas Erfahrung bekommen.

Beachten Sie jedoch, ORM ist keineswegs ein Allheilmittel. Sie können SQL hassen und es knifflig und fehleranfällig finden, aber Sie sind zum größten Teil einfach eine Reihe von Problemen für andere handeln. Ich persönlich denke, dass während ORM nützlich sein kann, es overhyped ist und eher eine falsche Wirtschaft ist als viele entweder erkennen, oder bereit sind, zuzulassen. Ich schrieb über diese mehr in ein ORM oder einfache SQL verwenden?

Ich sage nicht, dass Sie es nicht tun sollte. Nur gehen nicht in das Denken, es wird alle Ihre Probleme zu lösen. Da auch diese Rewrite wird nicht wirklich die Funktionalität überhaupt ändern (von dem, was Sie beschrieben haben) Ich bin nicht sicher, ob die Kosten dafür im Vergleich mit Fixierung, was schon da. Zu viele Unbekannte zu sagen, welche Art und Weise Ihre Situation gehen.

Nun, ja und nein -. Ihre DB-Verbindungen werden nur so lange verdoppelt werden, wie Sie haben beide eine nicht-PDO und PDO-Verbindung

Ich bin mir nicht sicher, was Sie mit der PDO_SQLITE Referenz bedeuten, da SQLite eine ganz andere Datenbank als die PostgreSQL es Sie jetzt verwenden scheint.

Es soll möglich sein, Ihre aktuellen Abfragen über PDO :: Abfrage auszuführen wie Sie heute tun, wenn Sie etwas sehr falsch machen:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top