>백엔드 개발 >Golang >최적의 성능을 위해 Google App Engine에서 Firestore 클라이언트를 어떻게 관리해야 합니까?

최적의 성능을 위해 Google App Engine에서 Firestore 클라이언트를 어떻게 관리해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-17 16:29:01924검색

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

Google App Engine의 요청별 Firestore 클라이언트

질문은 Google App Engine(GAE) 내에서 Firestore 클라이언트를 관리하는 적절한 접근 방식을 중심으로 진행됩니다. ). 문제는 클라이언트 라이브러리가 HTTP 요청으로 범위가 지정된 context.Context를 사용하도록 요구하는 GAE의 요구 사항에서 비롯됩니다.

문제

전통적으로 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()
}

그러나 이 접근 방식은 context.Context가 요청 범위에서 상속되어야 한다는 GAE의 요구 사항과 충돌합니다.

해결책

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Go 언어의 Hello World다음 기사:Go 언어의 Hello World