ホームページ >バックエンド開発 >Golang >最適なパフォーマンスを得るには、Google App Engine で Firestore クライアントをどのように管理すればよいですか?

最適なパフォーマンスを得るには、Google App Engine で Firestore クライアントをどのように管理すればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 16:29:01925ブラウズ

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

Google App Engine のリクエストごとの Firestore クライアント

質問は、Google App Engine (GAE) 内で Firestore クライアントを管理するための適切なアプローチを中心に展開しています。 )。この懸念は、クライアント ライブラリがコンテキストを使用するという GAE の要件に起因しています。コンテキストのスコープは HTTP リクエストです。

問題

従来、Firestore クライアントは次の方法:

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

ただし、このアプローチは GAE の context 要件と競合します。Context

解決策

GAE の新しい Go 1.11 ランタイムの解決策は、複数の呼び出しで firestore.Client インスタンスを再利用することです。これは古い Go ランタイムでは不可能だったので、リクエストごとに新しいクライアントを作成する必要がありました。

実装

Go 1.11 ランタイムでは、初期化できます。 main() または 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
}

内のリクエスト コンテキストを利用することによってハンドラー関数を使用すると、メインからハンドラーに ctx 変数を渡す必要がなくなり、依存関係の注入が簡素化され、コードの明瞭さが向上します。

リソース

  • [ GAE ゴー 1.11違い](https://cloud.google.com/appengine/docs/standard/go111/go-differences)
  • [Go 1.11 と 1.11 を使用したサンプル GAE アプリFirestore](https://github.com/hiranya911/firecloud/blob/master/crypto-fire-alert/cryptocron/web/main.go)

以上が最適なパフォーマンスを得るには、Google App Engine で Firestore クライアントをどのように管理すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。