Heim  >  Artikel  >  Backend-Entwicklung  >  Machen Sie sich mit dem Golang-MySQL-Datenbankverbindungspool vertraut

Machen Sie sich mit dem Golang-MySQL-Datenbankverbindungspool vertraut

藏色散人
藏色散人nach vorne
2021-05-11 11:32:542959Durchsuche

Das Folgende ist eine Einführung in den Golang-MySQL-Datenbankverbindungspool aus der Golang-Tutorial-Kolumne. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!

Vor kurzem habe ich die Go-Sprache ORM verwendet, um einige Datenbankoperationen durchzuführen, und schließlich einen Fehler gefunden, der zu einer ungültigen Verbindung führte. Deshalb habe ich mich über die Zeitüberschreitung des Verbindungspools und von MySQL informiert Erklären Sie es unten. (Ich verstehe, dass die Sprachen alle miteinander verbunden sind und die Prinzipien gleich sein sollten.)

Wenn wir die Datenbank hinzufügen, löschen, ändern und überprüfen möchten, besteht der erste Schritt darin, eine Verbindung zur Datenbank herzustellen.

//conn the database
func ConnDb(dbConnString string, dbName string) error {
	maxIdle := 50
	maxConn := 50
	err := orm.RegisterDataBase(dbName, "mysql", dbConnString+"?charset=utf8&loc=Asia%2FShanghai", maxIdle, maxConn)

	if err != nil {
		util.GLogger.Errorw("in Connect DB", "err", err)
	}
	return err
}

Die Verbindung hier ist die MySQL-Datenbank. Der maximale Verbindungspool ist auf 50 und der maximale Leerlauf eingestellt Verbindung ist 50.

Und wofür wird dieser Verbindungspool hauptsächlich verwendet? Einfach ausgedrückt: Wenn Sie Daten aus der Datenbank abrufen und ändern möchten, müssen Sie eine Pipeline mit der Datenbank einrichten. Wir alle wissen, dass TCP-Verbindungen zeitaufwändig sind Es hat eine gewisse Zeit gedauert, bis ich diese Pipeline gebaut habe. Wie kann ich sie also nehmen und verwenden, ohne sie wegzuwerfen? Dann ist der Verbindungspool der Ort, an dem diese etablierten Pipes gespeichert werden. Der Wert von 50 kann einfach als maximal 50 Pipes verstanden werden. Beachten Sie, dass je größer, desto besser, denn wenn er zu groß ist, wird er natürlich mehr Speicher beanspruchen , es wird zu viel Speicher beanspruchen, wenn es zu klein ist, wird es auf Blockierung warten.

Da diese Rohre im Verbindungspool platziert sind, bezieht sich die Leerlaufverbindung auf diese Leerlaufrohre. Es ist offensichtlich, dass der Wert der Leerlaufverbindung nicht größer sein sollte als die Größe des Verbindungspools, denn wenn er größer ist , der Verbindungspool hilft Ihnen nicht, so viele inaktive Verbindungsleitungen zu sparen.

Wie sieht der Arbeitsablauf jedes Mal aus, wenn Sie auf die Datenbank zugreifen, nachdem Sie diese einfachen Konzepte verstanden haben?

Auf diesem Bild können wir den gesamten Verbindungszugriffsprozess deutlich sehen.

Schritt 1 (Verfügbare Verbindungen abrufen) Gehen Sie zum Verbindungspool, um verfügbare inaktive Verbindungen zu finden. Wenn nicht, erstellen Sie eine neue Verbindung. Warten Sie dann, bis die Verbindung freigegeben wird. Wenn eine Verbindung im Leerlauf ist, wird natürlich direkt festgestellt, ob die Verbindung abgelaufen ist ob der Verbindungspool voll ist. Wenn nicht, erstellen Sie eine neue Verbindung und warten Sie, wenn sie voll ist.

Schritt2 (Operationsdatenbank) Nachdem Sie diese Verbindung hergestellt haben, führen Sie die Vorgänge zum Hinzufügen, Löschen, Ändern und Überprüfen aus.

Schritt 3 (Verbindung freigeben) Nach dem Betrieb der Datenbank müssen Sie die Verbindung freigeben. Wenn die Anzahl der inaktiven Verbindungen überschritten wird, wird sie direkt geschlossen Warten.

Dann werden Sie feststellen, dass diese Verbindung abläuft:

Zeitüberschreitung der MySQL-Datenbank. Wenn Sie eine Verbindung mit der Datenbank herstellen, kann die Datenbank Ihnen nicht immer vertrauen, sodass die Datenbank nach dieser Zeit abläuft Sie müssen Ihrer Verbindung nicht mehr vertrauen. Überprüfen Sie die verschiedenen von der Datenbank festgelegten Zeitüberschreitungen wie folgt:

show variables like  '%timeout%';

Dabei gibt es zwei Zeitüberschreitungen: Zeitüberschreitung bei interaktiver Verbindung (interactive_timeout) und Zeitüberschreitung bei nicht interaktiver Verbindung ( wait_timeout)

Interaktive Verbindung: Sie stellen über die Befehlszeile eine Verbindung zu MySQL her

Nicht interaktive Verbindung: Sie stellen im Programm eine Verbindung zu MySQL her

Und dieses nicht interaktive Timeout Das heißt, wenn die Leerlaufzeit einer Verbindung abgelaufen ist Wenn der Leerlauf im Verbindungspool die Einstellung „wait_timeout“ überschreitet, wird er ungültig. Wenn das Programm dann zu diesem Zeitpunkt die inaktive Verbindung erhält und eine Abfrage durchführt, wird das ursprüngliche Problem angezeigt: ungültige Verbindung.

Nachdem Sie die Grundprinzipien verstanden haben, ist die Lösung für ungültige Verbindungen ganz einfach:

1. Verlängern Sie die Wait_Timeout-Zeit der Datenbank.

2. Das Programm überprüft diese fehlgeschlagenen Verbindungen regelmäßig und verwirft sie rechtzeitig. Beachten Sie, dass die Prüfzeit des Programms hier kürzer sein muss als der von MySQL festgelegte Wert für wait_timeout.

Das Obige ist mein Verständnis des Verbindungspools. Wenn es Fehler gibt, weisen Sie sie bitte darauf hin. ~

Das obige ist der detaillierte Inhalt vonMachen Sie sich mit dem Golang-MySQL-Datenbankverbindungspool vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Parsen des HTTP-Clients von GoNächster Artikel:Parsen des HTTP-Clients von Go