1

Java 용 Objectify를 사용하고 있습니다. 최근에 ofy() .delete()를 사용하여 객체를 삭제 한 상황이 있었는데이 객체는 데이터 저장소에서 객체를 하드 삭제한다고 가정합니다. 여전히 삭제 된 개체가 App Engine 관리 콘솔에 나타납니다.

그러나 나는 아직도 AppEngine에의 관리 콘솔 (데이터 저장소 뷰어)에서이 하드 삭제 된 개체를 볼 수 있었다. ID/이름 열을 클릭하여이 개체를 확장 (편집)하려고하면 "이 엔티티가 없습니다."라는 오류 메시지가 나타납니다. ofy(). get()을 사용하여 데이터 저장소에서이 객체를 검색 할 수 있습니다.

인덱스가 업데이트되지 않기 때문에이인가?

미리 감사드립니다.

답변

2

당신은 높은 복제 데이터 저장소에서 쿼리의 결국 일관된 성격을보고있다. 여기

읽기 시작하기에 좋은 장소입니다 : https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency

+0

그래서 유일한 방법은 개체를 볼 수 있는지 확인하기 위해 트랜잭션을 삭제하는 것입니다? 그렇다면 트랜잭션 외부에서도 그 엔티티에 get()을 실행하면 여전히 값을 볼 수 있습니다. – honzajde

+0

데이터 저장소의 상태를 보장 할 수있는 유일한 방법은 트랜잭션을 사용하는 것 뿐이지 만 Get-by-Key는 트랜잭션 중인지 여부에 관계없이 강력한 일관성을 유지합니다. Objectify를 사용하면'Query.hybrid (true)'를 사용하여 질의를 키 전용 쿼리 + 일괄 처리로 변환 할 수 있습니다. Ofy는 쿼리 결과에 표시되지만 실제로 존재하지 않는 항목을 자동으로 제거합니다. – stickfigure

+0

글쎄, 고마워. 궁극적 인 일관성에 관해서 - put() - 결국 일관성있게 만든 다음 동일한 키에 대해 get()을 호출하면 - 내가 지정한 것을 얻을 수 있습니다 (나는이 엔티티에서 다른 쓰기가 발생하지 않을 것을 보장 할 수 있습니다)? 나는 이론적으로 생각하지 않는다. 나에게 어떤 보장 (백분율)을 줄 수있는 실용적인 범위 (시간 범위)가 있습니까? – honzajde

관련 문제