Firestore-Client-Erstellung in Google App Engine: Einzelclient oder pro Anfrage?

Mary-Kate Olsen
Freigeben: 2024-11-19 21:55:03
Original
593 Leute haben es durchsucht

Firestore Client Creation in Google App Engine: Single Client or Per Request?

Client-Erstellung für Firestore in Google App Engine: Einzeln oder pro Anfrage?

Muster für die Client-Erstellung

In Google Für App Engine besteht die allgemeine Empfehlung darin, die firestore.Client-Instanz für mehrere Aufrufe wiederzuverwenden. Ob jedoch ein einzelner Client oder ein Pro-Anfrage-Client besser geeignet ist, hängt von der spezifischen verwendeten App Engine-Version ab:

App Engine Standard mit Go 1.11 Runtime:

Mit der Go 1.11-Laufzeit kann jeder Kontext zum Initialisieren des firestore.Client verwendet werden. Dies ermöglicht die Clienterstellung in der Funktion main() oder jeder anderen Funktion, die den Hintergrundkontext verwendet. API-Aufrufe können dann innerhalb von Anforderungshandlern mithilfe des Anforderungskontexts durchgeführt werden.

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
}
Nach dem Login kopieren

App Engine Standard mit Go-Laufzeit vor 1.11:

In den älteren Go-Laufzeiten App Engine erzwang die Verwendung von Kontext, der auf eine HTTP-Anfrage beschränkt ist, für alle Clientbibliotheksinstanzen. Folglich musste auf Anfrage ein neuer Firestore-Client erstellt werden:

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

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

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

func (s *server) peopleHandler() http.HandlerFunc {
    // pass context in this closure from main?
    return func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context() // appengine.NewContext(r) but should it inherit from background somehow?
        s.person(ctx, 1)
        // ...
    }
}

func (s *server) person(ctx context.Context, id int) {
    // what context should this be?
    _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p)
    // handle client results
}

func NewFirestoreClient() *Firestore {
    ctx := context.Background()
    client, err := firestore.NewClient(ctx, os.Getenv("GOOGLE_PROJECT_ID"))
    if err != nil {
        log.Fatal(err)
    }

    return &Firestore{
        Client: client,
    }
}
Nach dem Login kopieren

Indem Sie das entsprechende Client-Erstellungsmuster basierend auf der App Engine-Version befolgen, können Sie die Leistung und Ressourcennutzung Ihrer Firestore-Anwendungen optimieren.

Das obige ist der detaillierte Inhalt vonFirestore-Client-Erstellung in Google App Engine: Einzelclient oder pro Anfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage