2011-10-18 2 views
0

Go에서 간단한 GAE 앱을 만들면 사용자가 두 가지 방법으로 투표하고 답변을 저장할 수 있습니다. 첫 번째 방법은 원시 데이터 ("X에 투표 됨"이라는 데이터베이스 저장소)이고, 두 번째는 해당 투표의 실행 횟수 ("X에 12 표, Y에 10 표")입니다. 동시에 여러 사람이 액세스하는 앱을 사용하여 두 값을 모두 저장하는 효과적인 방법은 무엇입니까? 데이터 저장소에서 데이터를 검색하여 변경 한 다음 한 인스턴스에서 다시 저장하면 다른 인스턴스가 병렬로 동일한 작업을 수행하려고 할 수 있습니다. 최종 결과가 올바른지 확실하지 않습니다.Google App Engine 점수 계산 및 저장 이동

답변

1

모든 투표 이벤트를 별도의 엔티티 ("X 투표"방식)로 저장하고 재 계산을 위해 Task Queue을 사용하는 것이 좋은 방법 인 것 같습니다 (X에 12 표, Y "방식)이므로 재 계산은 오프라인 및 순차적으로 수행됩니다 (인종 및 기타 동시 처리 문제없이). 그런 다음 recalc 작업을 한 번씩 큐에 넣어야 결과가 업데이트됩니다.

작업 대기열은 기존 작업과 동일한 이름의 다른 작업을 추가하는 것을 허용하지 않지만 특정 작업이 이미 대기열에 포함되어 있는지 확인하는 것을 허용하지 않으므로 동일한 이름의 작업을 대기열은 여러 개의 recalc 작업이 없는지 확인하는 데 충분합니다.

또 다른 방법은 결과를 다시 계산하기 위해 입력 채널에서 콕을 기다리는 goroutine을 사용하는 것입니다. App Engine에서 이러한 goroutines를 실행하지 않았으므로이 접근법의 일반적인 동작을 잘 모릅니다.