1

두 프로세스가 동일한 엔터티를 동시에 수정하지만 속성이 다른 경우에만 속성을 수정하면 DatastoreService.put을 호출 할 때 다른 프로세스의 변경 사항을 덮어 쓸 수 있습니까?GAE Datastore 동시성 질문

프로세스 A :

 
    theSameEntity.setProperty ("foo", "abc"); 
    DatastoreService.put (theSameEntity); 

프로세스 B :

 
    theSameEntity.setProperty ("bar", 123); 
    DatastoreService.put (theSameEntity); 

답변

3

예, 전체 개체가 데이터 저장소로 전송되기 때문에 그들은 서로의 변경 내용을 덮어 쓸 수 있습니다 가능 (serialized using protocol buffers)와 각 쓰기 (diff가 아님).

이것을 피하려면 transactions을 사용해야합니다.

1

그래,이 경우 (비록 내 경우에는 동시 요청이 동일한 속성을 수정했습니다).

트랜잭션에서 보장하는 데이터 저장소를 잠그지 않고 트랜잭션의 작업에 동일한 데이터가 표시되므로 트랜잭션이 도움이된다고 생각하지 않습니다. 나는 누군가가 이것에 대한 해결책을 찾았는지 알고 싶다.