2011-03-06 7 views
2

병렬 작업이 n 개 있습니다. 이러한 모든 작업이 완료되면 다른 작업을 만들고 싶습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 데이터 저장소 작업이 느리기 때문에 memcache를 사용했습니다. 각 작업이 완료되면 카운터를 1 씩 증가시킵니다. 나는 카운터를 계속 점검하고있다. memcache가 신뢰할 수 없으므로 카운터 값이 손실되는 경우가 있습니다. 다른 솔루션?Google App Engine Barrier 동기화

+0

"memcache가 신뢰할 수 없으므로"- 응? 당신이 실수로 당신의 코드일지도 모른다는 생각을 했습니까? –

+0

@Mitch : Sam은 Memcache가 언제든지 항목을 제거 할 수 있다는 사실을 언급하고 있습니다. 따라서 잃을 여유가없는 값을 저장하는 데는 적합하지 않습니다 (위에서 설명한 구성표 샘에서와 같이) . –

+0

@ David Underhill : 좋습니다. –

답변

5

카운터를 잃을 여유가 없으므로 데이터 저장소를 사용하여 카운터가 손실되지 않도록해야합니다 (예 : 예상치 못한 memcache 퇴거로 인해). 그러나 도 가능합니다.은 memcache에 값을 저장합니다. memcache에서 카운터를 빠르게 읽는 방법 (memcache 항목이 만료 된 경우 데이터 저장소로 이동하여 값을 가져 오는 방법)도 가능합니다.

데이터 저장소 카운터를 증가시키는 작업이 너무 많아 병렬로 실행되는 경우 sharded counter을 사용하여 이러한 병목 현상을 해결하십시오. 내가 사용하는 것이 좋습니다

+0

David에 동의합니다. GAE memcache에는 원자 적 연산이 있습니다.이 카운터에는 https://github.com/gregbayer/gae-livecount가 데이터 저장소와 함께 memcahe를 사용하여 별도의 작업으로 값을 저장합니다. 그것은 정말 잘 작동합니다. 나는 샤딩 카운터를 시험해 볼 것입니다. –