GAE 웹 응용 프로그램을 개발 중이며 조상 관계가없는 두 개의 엔터티 인스턴스간에 연결을 만들고 제거해야합니다 (동일한 인스턴스가 다를 수 있음을 고려하십시오) 한 번 생성 된 조상의 관계는 제거 할 수 없습니다.) 나는 '결과 일관성'정책을 경험했는데, 이는 내 웹 페이지의 데이터가 내가 만들고 삭제하는 관계와 일관되게 새로 고침되지 않음을 의미합니다. 그러나 put() 메서드를 두 번 실행하면 일관성이 강제적 인 것으로 보입니다.Google App Engine Datastore : 최종 일관성 처리
이것은 "새로운 업데이트가 제공되지 않았습니다 ..."라는 데이터의 결과 일관성 정의와 일치합니다. 데이터는 결국 일관성이 있으며, 다른 업데이트 (실제로 동일한 두 번) 시스템이 일관성을 강요한다고 생각합니다.
맞습니까? 그것을하는 다른 더 우아한 방법이 있습니까?
업데이트 :
내가 A 형 개체의 목록을 생각해 내 AIM, 그들이 실제로 무엇을 나타내는 중요하지 않습니다, 이제 그들은 내가 목록을 가지고 내 사업 의 주요 기관을 대표하는 가정 해 봅시다 A 유형의 엔티티가 의지 할 수있는 서비스를 나타내는 B 유형의 다른 엔티티 는 서비스 (B)가 많은 기관에서 사용할 수 있도록 많은 관계로 많은 인 엔티티 a가 b 형 B의 다양한 서비스가 제공 될 수있는 유형의
나는 나를 만들 수 있도록 웹 페이지를 이러한 관계 (클라이언트 측에서 Jquery Ajax 콜백을 사용하는 Jinja2 템플릿과 서버 측에서 데이터 저장소를 사용하는 webapp2 python 요청 처리기). 관계가 데이터 저장소에서 제거되면 엔티티에 대한 다른 쿼리를 만들고 관련이있는 b 키의 목록을 묘사하여 데이터를 새로 고칩니다. 이 경우 여전히 a와 관련된 b 키 목록에서 제거 된 b.key가 표시됩니다. 나는 내가 기대하는 바가 아니다.
UPDATE : 일부 CODE 여기
내가 제거하기 위해 사용하는 코드 내가 관계 여기
a.services.append(b.key);
b.servedEntities.append(a.key);
a.put()
b.put()
을 만드는 데 사용하는 코드 모델 여기
class A(ndb.Model):
name = ndb.StringProperty()
services = ndb.KeyProperty(repeated=True)
class B(ndb.Model):
name = ndb.StringProperty()
servedEntities = ndb.KeyProperty(repeated=True)
임 관계
a.services.remove(b.key);
b.servedEntities.remove(a.key);
a.put()
b.put()
난 아직도 b.key이 a.services
두 번 넣기를하면 무용지물이됩니다. 당신은 그들이 왜 일관성을 유지할 필요가 있는지 설명 할 수 있습니까? –
이 업데이트되었습니다. 나는 분명히 대답했으면 좋겠다. – lowcoupling
문제를 나타내는 가능한 최소한의 코드 샘플을 포함하면 도움이 될 것입니다. –