2010-06-23 3 views
1

각 사용자가 몇 초마다 서버를 폴링합니다. 몇 초마다 실행 대기중인 작업에 대해 지난 30 초 동안 폴링 한 사용자 목록을 유지해야합니다.Google 앱 엔진에서 현재 사용자를 추적하는 패턴은 무엇입니까?

내가보기에 분명한 방법은 사용자가 폴링 할 때마다 데이터 저장소 항목을 업데이트하고 작업 대기열에서 마지막 N 초 내에 타임 스탬프가있는 항목을 쿼리하는 것입니다. 나는이 스케일링을 잘 상상할 수 없다.

어떤 권장 사항이 있습니까?

감사합니다.

+0

타임 스탬프에 인덱스를 넣었는지 확인하십시오. –

답변

2

소규모 엔티티의 경우 약 1/20 초마다 벤치마킹을했습니다. 폴링 엔티티의 키를 사용자와 관련된 고유 한 값으로 설정하면 폴링 엔티티를 업데이트 할 때 키 대신 검색 대신 매우 빠른 해시 인 폴 엔티티에 액세스 할 수 있습니다.

엔티티에 동시에 쓸 필요가없는 한 씁니다. 각 사용자마다 하나씩 가지고 있기 때문에 수행하지 않는 것처럼 들릴 것입니다. 설문 조사 엔티티를 동일한 엔티티 그룹에 두지 마십시오. 그렇게 할 경우 하나의 엔티티에 쓰는 것은 쓰는 동안 다른 엔티티 모두를 고정시킵니다.

지난 30 초 동안 업데이트 된 모든 폴링 엔티티를 쿼리 할 수 ​​있습니다. 읽기이며 빠릅니다.

+0

현재 걱정되는 것은 현재 사용자 목록을 만드는 최종 쿼리입니다. 1000 명의 사용자가 폴링하면 1000 개의 엔티티를 가져와야 함을 의미합니다. 아니면 각 사용자에게 키를 할당하면 쿼리가 빠를 것이라고 말하는 것입니까? 감사. – shino

+0

나는 쿼리가 실제로 느려질 것이라고 생각한다. 아마 여러 개의 다른 질의로 페이지를 옮겨야 할 것입니다. 즉시 돌아 가야합니까? 몇 초마다 작업을 실행하면 마지막으로 쿼리를 수행 한 이후로 폴링 한 사용자를 폴링 할 수 있는지 궁금합니다. 또 다른 옵션은 최근에 폴링 된 사용자 목록을 보유한 50 개의 엔티티를 사용하는 것입니다. 사용자가 사용자 키를 사용하여 폴링 할 때 업데이트 할 엔터티를 결정하는 해시를 만들 수 있습니다. –

0

사용자 당 하나의 데이터 저장소 엔티티가 있어야하며, 폴링 할 때마다 현재 시간으로 업데이트해야합니다. 물론 모든 사용자 요청에 약간의 대기 시간을 추가 할 수 있습니다.

관련 문제