2013-05-06 2 views
0

부분적으로 Python으로 작성된 Java로 부분적으로 작성된 AppEngine 앱을 개발 중입니다. 다른 버전은 다른 언어를 사용합니다. 파이썬 측에서 ndb 데이터베이스를 사용하여 Java 코드와 공유되는 일부 모델에 액세스 할 수 있는지 궁금합니다.ndb를 Java 데이터 저장소 액세스와 동시에 사용할 수 있습니까?

특히, 엔티티가 Java 측에서 업데이트되면 해당 엔티티에 대한 ndb 캐시 된 값이 자동으로 무효화됩니까? 분명히 이것은 필수적입니다. 그렇지 않으면 ndb가 이전 값을 반환합니다.

또한 쓰기가 ndb에서 커밋 (반환)되면 키로 검색 할 때 Java 측에서 즉시 값을 사용할 수 있습니까? 캐시가 무효화되면 (자), 데이터가 Java 측의 키에 의해 취득 가능한 것을 보증하지 않는, ndb write 반환 값을 읽었습니다.

답변

3

Java Datastore API는 NDB의 캐시를 알지 못하기 때문에 Python 코드가 Java 프로세스의 변경 사항을 즉시 보도록하려면 캐시를 꺼야합니다. 특정 요청 (예 : key.get (use_memcache = False)) 또는 특정 모델 (_use_memcache = False를 클래스 변수로 추가)에 대해서만 캐시를 끌 수 있습니다.

NDB를 통해 Java로 변경된 사항에는 아무런 문제가 없습니다. 어디서 읽었는지 모르지만 비동기 쓰기를 사용하지 않고 응답을 기다리지 않는 한 데이터가 Datastore를 통해 쓰여지기 전에 NDB가 반환한다는 것은 사실이 아닙니다.하지만 인프라가 기다릴지라도 쓰기는 사용자에게 HTTP 응답을 보내기 전에 성공합니다).

  1. 가로 memcache에 항목을 무효화 데이터 저장소에 데이터를 쓰기 그것에 특별한 값을 작성하여 memcache에 항목을 잠 그려면 다음과 같이

    쓰기의 이벤트의 실제 순서는 를 삭제

합니다 (Memcache의 항목은 다음 읽기가 최신 상태입니다.)

+0

보다 ks, 이것은 매우 도움이됩니다. 나는 자바가 사용하는 인프라에서 구현 된 ndb 캐시 - 무효화 메커니즘이 있는지 궁금해했다. 제 경우에는 memcache를 사용하지 않고 ndb get을 할 것입니다. 매번 자주 제안 할 때 자주 사용하는 것이 좋으며 그렇게 자주 가져온 것 사이의 부실 데이터를 사용하는 것이 제 목적에 적합합니다. – Luca

+0

사실, 아직 질문이 있습니다. .get (use_memcache = False)를 사용하여 읽으면 데이터 저장소의 값으로 memcache를 업데이트합니까, 아니면 memcache를 무시하고 변경되지 않은 memcache의 부실 값을 그대로 둡니까? – Luca

+0

Memcache를 완전히 우회합니다. –

관련 문제