Google App Engine (GAE) schlägt vor, für jede Clientbibliothek einen context.Context zu verwenden, der auf die HTTP-Anfrage beschränkt ist. Dadurch wird sichergestellt, dass der Client an die spezifische Anfrage gebunden ist und kontextspezifische Daten für die Datenbankoperationen bereitstellt.
Pro-Request-Ansatz:
Im bereitgestellten Beispiel wird für jeden ein neuer Firestore-Client innerhalb der Handler-Funktion erstellt Anfrage:
func (s *server) person(ctx context.Context, id int) { _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p) }
Während dieser Ansatz sicherstellt, dass der Client von der aktuellen Anfrage isoliert ist, kann er ineffizient sein und unnötigen Overhead verursachen, insbesondere bei Anfragen mit langer Laufzeit oder hochfrequenten Vorgängen.
Globaler Client-Ansatz:
Ein alternativer Ansatz besteht darin, einen einzelnen globalen Firestore-Client zu erstellen und ihn für mehrere Anfragen wiederzuverwenden. Dies war jedoch in der alten Go-Laufzeit in GAE nicht möglich.
Mit der Einführung der Go 1.11-Laufzeit für den GAE-Standard wurden die Kontext-Scoping-Einschränkungen gelockert. Dadurch können Sie jetzt jeden Kontext verwenden, den Sie bevorzugen.
In der neuen GAE-Standardlaufzeit wird Folgendes empfohlen:
Initialisieren Sie den Firestore-Client in der Funktion main() oder init() unter Verwendung des Hintergrunds Kontext:
func init() { var err error client, err = firestore.NewClient(context.Background()) }
Verwenden Sie in Anforderungshandlern den Anforderungskontext für API-Aufrufe:
func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) }
Indem Sie diese Best Practices befolgen, Sie können die Effizienzgewinne nutzen, die sich durch die Wiederverwendung eines globalen Firestore-Clients ergeben, und gleichzeitig den anforderungsspezifischen Kontext in Ihren Datenbankvorgängen beibehalten.
Das obige ist der detaillierte Inhalt vonFirestore-Client in Google App Engine: Pro-Anfrage oder global?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!