ホームページ > バックエンド開発 > Golang > Google App Engine での Firestore クライアントの作成: 単一クライアントかリクエストごと?

Google App Engine での Firestore クライアントの作成: 単一クライアントかリクエストごと?

Mary-Kate Olsen
リリース: 2024-11-19 21:55:03
オリジナル
657 人が閲覧しました

Firestore Client Creation in Google App Engine: Single Client or Per Request?

Google App Engine での Firestore のクライアント作成: 単一またはリクエストごと?

クライアント作成のパターン

Google App Engine では、複数の呼び出しで firestore.Client インスタンスを再利用することが一般的に推奨されます。ただし、単一クライアントとリクエストごとのクライアントのどちらが適切かは、使用する App Engine の特定のバージョンによって異なります:

App Engine Standard with Go 1.11 ランタイム:

Go 1.11 ランタイムでは、任意のコンテキストを利用して firestore.Client を初期化できます。これにより、main() 関数またはバックグラウンド コンテキストを使用するその他の関数でクライアントを作成できるようになります。 API 呼び出しは、リクエスト コンテキストを使用してリクエスト ハンドラ内で行うことができます。

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
}
ログイン後にコピー

1.11 より前の Go ランタイムを使用した App Engine 標準:

古い Go ランタイムの場合, App Engine は、すべてのクライアント ライブラリ インスタンスに対して HTTP リクエストをスコープとするコンテキストの使用を強制しました。そのため、リクエストごとに新しい firestore.Client を作成する必要がありました。

func main() {
    // Setup server
    s := &server{db: NewFirestoreClient()}

    // Setup Router
    http.HandleFunc("/people", s.peopleHandler())

    // Starts the server to receive requests
    appengine.Main()
}

func (s *server) peopleHandler() http.HandlerFunc {
    // pass context in this closure from main?
    return func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context() // appengine.NewContext(r) but should it inherit from background somehow?
        s.person(ctx, 1)
        // ...
    }
}

func (s *server) person(ctx context.Context, id int) {
    // what context should this be?
    _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p)
    // handle client results
}

func NewFirestoreClient() *Firestore {
    ctx := context.Background()
    client, err := firestore.NewClient(ctx, os.Getenv("GOOGLE_PROJECT_ID"))
    if err != nil {
        log.Fatal(err)
    }

    return &Firestore{
        Client: client,
    }
}
ログイン後にコピー

App Engine のバージョンに基づいた適切なクライアント作成パターンに従うことで、Firestore アプリケーションのパフォーマンスとリソース使用率を最適化できます。

以上がGoogle App Engine での Firestore クライアントの作成: 単一クライアントかリクエストごと?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート