Maison >développement back-end >Golang >Comment dois-je gérer les clients Firestore dans Google App Engine pour des performances optimales ?

Comment dois-je gérer les clients Firestore dans Google App Engine pour des performances optimales ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 16:29:01925parcourir

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

Client Firestore par requête dans Google App Engine

La question tourne autour de l'approche appropriée pour gérer les clients Firestore dans Google App Engine (GAE ). Le problème vient de l'exigence de GAE pour les bibliothèques clientes d'utiliser un contexte. Le contexte est limité à une requête HTTP.

Le problème

Traditionnellement, les clients Firestore sont créés dans le de la manière suivante :

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()
}

Cependant, cette approche entre en conflit avec l'exigence de GAE en matière de contexte. Le contexte doit hériter de la portée de la demande.

La solution

La solution dans le nouveau runtime Go 1.11 de GAE consiste à réutiliser l'instance firestore.Client pour plusieurs invocations. Cela n'était pas possible dans l'ancien runtime Go, d'où la nécessité de créer un nouveau client par requête.

Implémentation

Dans le runtime Go 1.11, vous pouvez initialiser le client dans main() ou 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
}

En utilisant le contexte de requête dans les fonctions de gestionnaire, vous pouvez éliminer le besoin de transmettre la variable ctx de main aux gestionnaires, simplifier l'injection de dépendances et améliorer clarté du code.

Ressources

  • [Différences GAE Go 1.11](https://cloud.google.com/appengine/docs/standard/go111/ go-differences)
  • [Exemple d'application GAE utilisant Go 1.11 et Firestore](https://github.com/hiranya911/firecloud/blob/master/crypto-fire-alert/cryptocron/web/main.go )

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn