Frage

Ich erinnere mich, dass ich gehört habe, dass der Verbindungsprozess in MySQL im Vergleich zu anderen RDBMSs sehr schnell ist und daher verwendet wird Eine Bibliothek, die Verbindungsbading bietet (SQLALCHEMY) Hilft Ihnen nicht so viel, wenn Sie den Verbindungspool aktivieren.

Hat jemand Erfahrung damit?

Ich bin misstrauisch, es zu aktivieren, weil es die Möglichkeit hat, dass, wenn ein Code etwas staatlich zu einer DB -Verbindung macht und (vielleicht fälschlicherweise) nach sich selbst nicht aufräumt Propagiert in den nachfolgenden Code, der eine recycelte Verbindung erhält.

War es hilfreich?

Lösung

Wenn Sie sich bei der Verwendung von SQLA -Verbindungspool nicht um den Reststatus in einer Verbindung sorgen müssen, wenn Ihre Anwendung nicht die verbindungsweiten Optionen wie Transaktions -Isolationsstufen ändert (was im Allgemeinen nicht der Fall ist), wird dies nicht der Fall geändert. Der Verbindungspool von SQLA gibt eine Verbindung aus.

Es ist möglich, dass die Verbindungszeit von MySQL ziemlich schnell ist, insbesondere wenn Sie sich über Unix -Sockets auf derselben Maschine verbinden. Wenn Sie einen Verbindungspool verwenden, möchten Sie auch sicherstellen, dass die Verbindungen nach einem Zeitraum recycelt werden, da die Client -Bibliothek von MySQL die Verbindungen, die länger als 8 Stunden automatisch im Leerlauf sind (in SQLalchemy, die Option pool_recycle ist).

Sie können schnell eine Bankverbindungspool im Vergleich zu NON -SQLA -Anwendung durchführen, indem Sie die Poolimplementierung vom Standardwert von Queuepool nach Nullpool ändern. Dies ist eine Pool -Implementierung, die eigentlich nichts bündelt - es verbindet und enthält die Verbindung, wenn die real ist, wenn die Die stellvertretende Verbindung wird erworben und später geschlossen.

Andere Tipps

Auch wenn der Verbindungsteil von MySQL selbst ziemlich schick ist, ist vermutlich immer noch eine Netzwerkverbindung (unabhängig davon, ob es sich um Loopback oder Physical handelt). Wenn Sie eine machen viel von Anfragen, die erheblich teuer werden könnten. Es hängt (wie oft so oft der Fall) davon ab, was Ihre Anwendung natürlich tut - wenn Sie viel Arbeit pro Verbindung leisten, dominiert dies und Sie werden nicht viel gewinnen.

Im Zweifelsfall, Benchmark-aber ich würde mich dem vertrauen, dass eine Verbindungspooling-Bibliothek (zumindest eine seriöse) ordnungsgemäß funktionieren und die Dinge angemessen zurücksetzen sollte.

Kurze Antwort: Sie müssen es bewerten.

Lange Antwort: Es kommt darauf an. MySQL ist schnell für die Verbindungsanlage. Es ist also kein guter Grund, sich für das Verbindungsbad zu vermeiden. Wo Sie gewinnen, wenn die Abfragen nur wenige und schnell sind, weil Sie einen Sieg mit dem Pooling sehen.

Die andere Sorge ist, wie die Anwendung den SQL -Thread behandelt. Wenn es keine SQL -Transaktionen erledigt und keine Annahmen über den Zustand des Threads trifft, ist das Pooling kein Problem. OTOH, Code, der sich auf die Schließung des Threads stützt, um temporäre Tabellen zu verwerfen oder Rollback -Transaktionen zu verwerfen, hat viele Probleme mit dem Pooling.

Der Verbindungspool beschleunigt die Tatsache, dass Sie nicht jedes Mal, wenn Sie eine Datenbankabfrage durchführen, ein java.sql.connection -Objekt erstellt haben. Ich verwende den Tomcat -Verbindungspool zu einer MySQL -Datenbank für Webanwendungen, die viele Abfragen durchführen. Während der hohen Benutzerbelastung gibt es eine spürbare Geschwindigkeitsverbesserung.

Ich habe mit Django einen einfachen erholsamen Service geleistet und ihn mit und ohne Verbindungspooling getestet. In meinem Fall war der Unterschied ziemlich auffällig.

In einem LAN ohne sie lag die Reaktionszeit zwischen 1 und 5 Sekunden. Damit weniger als 20 ms. Die Ergebnisse können variieren, aber die Konfiguration, die ich für die MySQL & Apache-Server verwende, ist ziemlich Standard-Low-End.

Wenn Sie UI -Seiten über das Internet bedienen, ist die zusätzliche Zeit für den Benutzer möglicherweise nicht spürbar, aber in meinem Fall war es inakzeptabel, daher habe ich mich für die Verwendung des Pools entschieden. Hoffe das hilft dir.

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