최근에 HRD와 NDB에 대한 많은 문서를 읽었지만 아직 NDB가 어떻게 캐시하는지에 대한 의문점이 있습니다.높은 복제 Datastore + NDB로 쓰기/읽기
예 케이스 :
는 사용자 데이터를 기록하고 앱이 쓰기 후 즉시 인출 할 필요가있는 경우를 상상해보십시오. 예 : 사용자는 "그룹"(Facebook/Linkedin 그룹과 유사)을 만들고 그룹을 만든 직후 그룹으로 리디렉션됩니다. (현재, 나는 그것을 조상을 지정하지 않고 그룹을 만드는거야)
결과 :
로컬 기능의 종류를 테스트 할 때 즉시 새로 페치 (활성화 높은 복제를 가짐) 생성 된 그룹이 실패합니다. NoneType이 리턴됩니다.
질문 :
내가 NDB 캐싱이 알아서는 안하지만, 더 높은 쓰기 대기 시간이 있음을 이해하고, 높은 복제 문서와 구글 IO 비디오를 통해 간 데? 나는. 쓰기가 캐시되고 비동기 적으로 실제로 디스크에 쓰여 지므로 즉시 읽기는 캐시에서 읽는 것이므로 아무런 문제가 없어야합니다. 다른 설정을 적용해야합니까?
감사합니다. 컨텍스트 캐싱을 사용하는 HTTP 요청 문제가 적합합니다. 그러나 트랜잭션 작업으로 변환해도 문제가 해결되지 않습니다. 내가 틀렸다면 정정하십시오. 그러나 Datastore는 디스크에 쓰기 전에 키를 반환합니다. 이것이 키를 얻었을지라도, 그것을 얻을 때 NoneType을 반환하는 이유입니다. 해결 방법은 몇 초 동안 memcache에 대한 것일 수 있습니다 ... 좋은 해결책인가요? –
읽기 : https://developers.google.com/appengine/docs/python/datastore/overview#Datastore_Writes_and_Data_Visibility 데이터 저장소가 가져오고 상위 쿼리가 실행되기 전에 해결되지 않은 수정 사항이 적용되므로 이러한 작업은 항상 모든 이전의 성공적인 트랜잭션. 이것은 get 연산 (키에 의해 업데이트 된 엔티티를 찾음)이 해당 엔티티의 최신 버전을 볼 수 있음을 의미합니다. " 그래서 내가 말할 수있는 한, put에서 생성 된 키로 get을 한 후에는 noneType을 얻지 않아야한다고 말할 수 있습니다. –
감사합니다. 내 생각에 "일관된"GAE는 시스템 주변에 부분적으로 업데이트 된 데이터가 없다는 것을 의미한다고 생각합니다. 나는 이것이 열쇠가 반환 될 때 기록된다는 것을 의미하지는 않는다. 좀 더 테스트를했는데 값을 업데이트하고 페이지로 리디렉션하지 않으면 즉시 컨텍스트 캐시에서 오는 새 값을 봅니다. 그러나 업데이트하고 리디렉션하면 첫 페이지로드시 값이 업데이트되지 않습니다 (언급 한 HTTP 요청 문제로 인해). 내가 다시로드 할 때만 (디스크에 쓸 시간이 있음) 업데이트 된 값을 볼 수 있습니까? –