2016-12-07 2 views
0

Ich versuche zu verstehen, wie ActiveRecord pro Modell eine Verbindung zu einer Datenbank herstellt. Nehmen wir an, wir haben 2 Modelle und eine Datenbank. Wenn Sie für beide Modelle eine einfache Model.find erstellen, erstellt dies eine neue Datenbankverbindung für jedes Modell, so dass es eine eigene definierte Verbindung hat oder eine einzelne Verbindung zur initialisierten Datenbank besteht, die für alle 2 Modelle freigegeben ist. Wer weiß, wo es in der code?Erstellt ActiveRecord pro Modell eine neue Datenbankverbindung?

Ich versuche zu verstehen, wie ActiveRecord dies erreicht.

Antwort

2

ActiveRecord verwendet einen Verbindungspool. Wenn Sie versuchen, mit der Datenbank zu interagieren, wird eine Verbindung vom Pool abgerufen, eine Abfrage wird durchgeführt und die Verbindung wird nach der Abfrage an den Pool zurückgegeben. All dies wird von im Hintergrund behandelt. Sie können die Anzahl der Verbindungen im Pool in Ihrer Datenbank-Konfiguration

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html

Sie können dies einfach testen einstellen. Führen Sie eine Abfrage in der Controller-Aktion aus, die einige Minuten dauert. Geben Sie mehrere Anforderungen an die Aktion aus, und Sie können Verbindungsfehler erkennen

+0

Also ist ein "Verbindungspool" tatsächlich einzelne Verbindungen zur Datenbank? – Peter

+1

ja und sie werden für eine bestimmte Zeit auf der Grundlage der Konfiguration geöffnet bleiben – usha

+0

Vielen Dank für die Klärung für mich. Wenn Sie MongoDB verwenden, hat es auch einen eigenen internen Verbindungspool, daher ist der Verbindungspool von ActiveRecord hier nicht notwendig, oder? – Peter

Verwandte Themen