> 백엔드 개발 > Golang > Google App Engine 데이터 저장소 쿼리 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?

Google App Engine 데이터 저장소 쿼리 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?

DDD
풀어 주다: 2024-12-07 06:21:17
원래의
864명이 탐색했습니다.

Why Do My Google App Engine Datastore Query Tests Fail, and How Can I Fix Them?

Google App Engine Datastore: 쿼리 테스트 실패 설명

Google App Engine Datastore에서 쿼리를 테스트하는 것은 데이터 저장소의 최종 일관성으로 인해 어려울 수 있습니다. 모델. 처음에는 테스트 코드가 올바른 것처럼 보일 수 있지만 쿼리는 최근 데이터 저장소에 유지된 데이터를 검색하지 못합니다.

이러한 불일치는 프로덕션 환경에서 발생할 수 있는 잠재적인 지연을 모방한 데이터 저장소의 시뮬레이션된 지연 시간에서 발생합니다. 쓰기 작업을 수행한 후 후속 쿼리가 새로 추가된 항목을 즉시 반환하지 않을 수 있습니다.

해결책: 최종 일관성

이 문제를 해결하려면 짧은 지연을 포함할 수 있습니다. Put 작업과 쿼리 사이에 데이터 저장소가 변경 사항을 일관되게 전파할 수 있도록 합니다. 대부분의 경우 100ms 정도의 지연이면 충분합니다.

Strongly Consistent Queries

또는 StronglyCondependentDatastore 옵션을 true로 설정하여 Strongly Consistency 쿼리를 활용할 수도 있습니다. . 강력한 일관성을 갖춘 쿼리는 최근 작성된 데이터를 즉시 검색할 수 있도록 보장합니다.

다음 코드 조각은 시뮬레이션된 지연 시간을 사용한 쿼리 테스트를 보여줍니다.

type Entity struct {
    Value string
}

func TestEntityQuery(t *testing.T) {
    c, err := aetest.NewContext(nil)
    if err != nil {
        t.Fatal(err)
    }
    defer c.Close()

    key := datastore.NewIncompleteKey(c, "Entity", nil)
    key, err = datastore.Put(c, key, &Entity{Value: "test"})
    if err != nil {
        t.Fatal(err)
    }

    // Wait briefly to simulate latency
    time.Sleep(100 * time.Millisecond)

    q := datastore.NewQuery("Entity").Filter("Value =", "test")
    var entities []Entity
    keys, err := q.GetAll(c, &entities)
    if err != nil {
        t.Fatal(err)
    }
    if len(keys) == 0 {
        t.Error("No keys found in query")
    }
    if len(entities) == 0 {
        t.Error("No entities found in query")
    }
}
로그인 후 복사

위 내용은 Google App Engine 데이터 저장소 쿼리 테스트가 실패하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿