首页 > 后端开发 > Golang > 我应该如何管理 Google App Engine 中的 Firestore 客户端以获得最佳性能?

我应该如何管理 Google App Engine 中的 Firestore 客户端以获得最佳性能?

Mary-Kate Olsen
发布: 2024-11-17 16:29:01
原创
928 人浏览过

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

Google App Engine 中的按请求 Firestore 客户端

问题围绕在 Google App Engine (GAE) 中管理 Firestore 客户端的适当方法展开)。该问题源于 GAE 对客户端库使用 context 的要求。Context 范围仅限于 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 变量从 main 传递到处理程序,简化依赖注入并提高代码清晰度。

资源

  • [GAE Go 1.11差异](https://cloud.google.com/appengine/docs/standard/go111/go-differences)
  • [使用 Go 1.11 和 Firestore 的示例 GAE 应用程序](https://github.com/ hiranya911/firecloud/blob/master/crypto-fire-alert/cryptocron/web/main.go)

以上是我应该如何管理 Google App Engine 中的 Firestore 客户端以获得最佳性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板