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