2010-02-24 4 views
1

, 나는 클래스 클래스 C을 모델링하는 ReferenceProperty c을 가지고 클래스 B를, 모델에 ReferenceProperty b을 가지고 A의 모델을 가지고 말한다. A의 인스턴스가 이미 데이터 스토어에 존재하는 가정참조 된 모델로드 파이썬에서

, 나는 말을하여 얻을 수 있습니다 :이 시나리오에서는

q = A.all() 
a = q.get() 

어떻게합니까 엔티티 로딩 작업을? a을 검색 할 때 a.b이 검색됩니까? a.b을 검색 할 때 a.b.c이 검색됩니까? bc은 처음 액세스했을 때만 검색됩니까? memcache에 a을 저장하려면 bc도 저장해야합니까? 그렇지 않다면, 내가 언제 a을 다시 memcache에서 꺼낼 때 검색 할 수 있습니까?

내가 호기심 외에이 질문을하는 이유는 내가 memcache에 저장하고 싶은 엔티티가 있기 때문이지만 다른 엔티티 (다른 엔티티에 연결되는 링크 등)에 링크되어 있기 때문에 링크 된 엔티티의 전체 크기는 1MB를 초과 할 수 있습니다.

감사합니다.

답변

2

모델은 처음 액세스 할 때 역 참조됩니다. 따라서 a.b를 호출하면 b가되고 a.b.c를 호출하면 c가됩니다. 여기 http://blog.notdot.net/2009/9/Efficient-model-memcaching

+0

이 proto_buf 대 피클에 몇 가지 추가 설명입니다 :

이 memcahing 모델에 대한 몇 가지 팁 닉 존슨의 블로그에서보세요 http://groups.google.com/group/google-appengine/browse_thread/thread/f91ec576cddc75de/5a6b0d8ea28e02a1 –

+0

아, 나는 피클 - 대 -pb 일에 대해 들었습니다. 나는 평범한 끈을 피클하는 것이 얼마나 빠르지 궁금해? – Cameron

+0

필자의 테스트에서, 문자열을 pickling하는 것은 매우 간단한 모델 인스턴스를 pickling하는 것보다 훨씬 빠르다. –

1

참조 속성은 느리게로드됩니다. 은 실제로 뭔가를 사용할 때까지 데이터 저장소에서 조회되지 않습니다.

관련 문제