Maison > développement back-end > Golang > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-17 16:29:01
original
858 Les gens l'ont consulté

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()
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal