Enjin Apl Google (GAE) mencadangkan menggunakan konteks.Konteks diskop kepada permintaan HTTP untuk setiap pustaka klien. Ini memastikan bahawa pelanggan terikat dengan permintaan khusus, menyediakan data khusus konteks untuk operasi pangkalan data.
Pendekatan Setiap Permintaan:
Dalam contoh yang disediakan, pelanggan Firestore baharu dicipta dalam fungsi pengendali untuk setiap permintaan:
func (s *server) person(ctx context.Context, id int) { _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p) }
Walaupun pendekatan ini memastikan pelanggan diasingkan kepada permintaan semasa, ia boleh menjadi tidak cekap dan memperkenalkan overhed yang tidak perlu, terutamanya untuk permintaan jangka panjang atau operasi frekuensi tinggi.
Pendekatan Pelanggan Global:
Pendekatan alternatif ialah mencipta satu pelanggan Firestore global dan gunakannya semula untuk berbilang permintaan. Walau bagaimanapun, ini tidak dapat dilaksanakan dalam masa jalan Go lama dalam GAE.
Dengan pengenalan masa jalan Go 1.11 untuk standard GAE, sekatan skop konteks telah dilonggarkan. Ini kini membolehkan anda menggunakan mana-mana konteks yang anda suka.
Dalam masa jalan standard GAE baharu, anda disyorkan untuk:
Mulakan klien Firestore dalam fungsi main() atau init() menggunakan latar belakang konteks:
func init() { var err error client, err = firestore.NewClient(context.Background()) }
Dalam pengendali permintaan, gunakan konteks permintaan untuk panggilan API:
func handleRequest(w http.ResponseWriter, r *http.Request) { doc := client.Collection("cities").Doc("Mountain View") doc.Set(r.Context(), someData) }
Dengan mengikuti amalan terbaik ini, anda boleh memanfaatkan keuntungan kecekapan yang disediakan dengan menggunakan semula klien Firestore global sambil masih mengekalkan konteks khusus permintaan dalam operasi pangkalan data anda.
Atas ialah kandungan terperinci Pelanggan Firestore dalam Enjin Apl Google: Per-Permintaan atau Global?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!