Heim  >  Artikel  >  Backend-Entwicklung  >  Wie sollte ich Firestore-Clients in Google App Engine verwalten, um eine optimale Leistung zu erzielen?

Wie sollte ich Firestore-Clients in Google App Engine verwalten, um eine optimale Leistung zu erzielen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-17 16:29:01853Durchsuche

How Should I Manage Firestore Clients in Google App Engine for Optimal Performance?

Pro-Request-Firestore-Client in Google App Engine

Die Frage dreht sich um den geeigneten Ansatz zur Verwaltung von Firestore-Clients in Google App Engine (GAE). ). Die Sorge ergibt sich aus der Anforderung von GAE, dass Client-Bibliotheken einen Kontext verwenden müssen.Kontext, der auf eine HTTP-Anfrage beschränkt ist.

Das Problem

Traditionell wurden Firestore-Clients in erstellt auf folgende Weise:

type server struct {
    db *firestore.Client
}

func main() {
    s := &server{db: NewFirestoreClient()}

    // Setup Router
    http.HandleFunc("/people", s.peopleHandler())

    // Starts the server to receive requests
    appengine.Main()
}

Dieser Ansatz steht jedoch im Widerspruch zu der GAE-Anforderung, context.Context von der Anfrage zu erben Geltungsbereich.

Die Lösung

Die Lösung in der neuen Go 1.11-Laufzeit von GAE besteht darin, die firestore.Client-Instanz für mehrere Aufrufe wiederzuverwenden. Dies war in der alten Go-Laufzeit nicht möglich, daher musste auf Anfrage ein neuer Client erstellt werden.

Implementierung

In der Go 1.11-Laufzeit können Sie initialisieren den Client in main() oder init().

package main

var client *firestore.Client

func init() {
  var err error
  client, err = firestore.NewClient(context.Background())
  // handle errors as needed
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
  doc := client.Collection("cities").Doc("Mountain View")
  doc.Set(r.Context(), someData)
  // rest of the handler logic
}

Durch die Verwendung des Anforderungskontexts innerhalb von Handlerfunktionen können Sie die Notwendigkeit einer Übergabe überflüssig machen die ctx-Variable von main zu Handlern, vereinfacht die Abhängigkeitsinjektion und verbessert die Klarheit des Codes.

Ressourcen

  • [GAE Go 1.11-Unterschiede](https:// cloud.google.com/appengine/docs/standard/go111/go-differences)
  • [Beispiel GAE-App mit Go 1.11 und Firestore](https://github.com/hiranya911/firecloud/blob/master/crypto-fire-alert/cryptocron/web/main.go)

Das obige ist der detaillierte Inhalt vonWie sollte ich Firestore-Clients in Google App Engine verwalten, um eine optimale Leistung zu erzielen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Hallo Welt in Go-SpracheNächster Artikel:Hallo Welt in Go-Sprache