ホームページ > バックエンド開発 > Golang > Google App Engine の Firestore クライアント: リクエストごとかグローバルか?

Google App Engine の Firestore クライアント: リクエストごとかグローバルか?

Linda Hamilton
リリース: 2024-11-25 11:45:15
オリジナル
570 人が閲覧しました

Firestore Client in Google App Engine: Per-Request or Global?

Google App Engine での Firestore クライアントの作成: リクエストごとまたはグローバル?

Google App Engine のコンテキスト認識

Google App Engine (GAE)各クライアント ライブラリの HTTP リクエストをスコープとする context.Context を使用することを提案します。これにより、クライアントが特定のリクエストに関連付けられ、データベース操作にコンテキスト固有のデータが提供されるようになります。

リクエストごととグローバル クライアント

リクエストごとのアプローチ:

提供された例では、新しい Firestore クライアントがハンドラー関数内で作成されますrequest:

func (s *server) person(ctx context.Context, id int) {
    _, err := s.db.Client.Collection("people").Doc(uid).Set(ctx, p)
}
ログイン後にコピー

このアプローチでは、クライアントが現在のリクエストから確実に分離されますが、特に長時間実行されるリクエストや高頻度の操作の場合、非効率的で不要なオーバーヘッドが発生する可能性があります。

グローバル クライアント アプローチ:

別のアプローチは、単一のグローバル Firestore クライアントを作成し、それを再利用することです。複数のリクエスト。ただし、これは GAE の古い Go ランタイムでは実現できませんでした。

新しい Go 1.11 ランタイム

GAE 標準の Go 1.11 ランタイムの導入により、コンテキスト スコープの制限が緩和されました。これにより、任意のコンテキストを使用できるようになりました。

Go 1.11 と Firestore のベスト プラクティス

新しい GAE 標準ランタイムでは、次のことが推奨されます。

  1. バックグラウンドを使用して main() または init() 関数で Firestore クライアントを初期化します。 context:

    func init() {
     var err error
     client, err = firestore.NewClient(context.Background())
    }
    ログイン後にコピー
  2. リクエスト ハンドラーでは、API 呼び出しのリクエスト コンテキストを使用します:

    func handleRequest(w http.ResponseWriter, r *http.Request) {
     doc := client.Collection("cities").Doc("Mountain View")
     doc.Set(r.Context(), someData)
    }
    ログイン後にコピー

次のベスト プラクティスに従って、データベース操作でリクエスト固有のコンテキストを維持しながら、グローバル Firestore クライアントを再利用することで得られる効率の向上を活用できます。

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

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