2012-08-08 2 views
1

특정 Appengine Datastore 필드에서 7 일간의 후행 통계를 표시하려고합니다. 모델에 정수 필드 "Foo"가있는 경우 지난 7 일 동안 Foo가 증가하여 상위 N 개 모델을 찾을 수 있기를 바랍니다.Appengine Datastore의 일일 통계 추적

예를 들어 설명하는 것이 가장 좋습니다. 우리는 푸 필드 두 엔터티가 있다고 가정하고 우리는 푸의 가치 매일 자정에 샘플 :

나는 (매일) 7 일 델타 구축 할 수 있도록하려면
Day  01 02 03 04 05 06 07 08 09 10 11 12 13 
User1.Foo 1 2 3 4 5 6 7 8 9 8 7 6 5 
User2.Foo 50 55 50 45 50 55 50 45 50 55 50 45 50 

:

Day  01 02 03 04 05 06 07 08 09 10 11 12 13 
User1.FooDelta7d   6 6 6 4 2 0 -2 
User2.FooDelta7d   0 -10 0 10 0 -10 0 

ORDER BY FooDelta7d 사용자를 쿼리 할 수 ​​있습니다.

내가 FOO1 FOO2 Foo3 ... Foo7처럼, 각 사용자에 7 개 별도의 항목을 유지하여이 문제를 해결하고 자정에 작성되는 항목을 결정 해 모듈로 7 일이 걸릴 수

:

Day  01 02 03 04 05 06 07 08 09 10 11 12 13 
User1.Foo 1 2 3 4 5 6 7 8 9 8 7 6 5 
User1.Foo1 1 1 1 1 1 1 1 8 8 8 8 8 8 
User1.Foo2 2 2 2 2 2 2 2 9 9 9 9 9 
User1.Foo3  3 3 3 3 3 3 3 8 8 8 8 
User1.Foo4   4 4 4 4 4 4 4 7 7 7 
User1.Foo5    5 5 5 5 5 5 5 6 6 
User1.Foo6    6 6 6 6 6 6 6 5 
User1.Foo7     7 7 7 7 7 7 7 

그래서 하루 10 일에 델타는 User1.Foo3 - User1.Foo4 = 8 - 4 = 4입니다.이 방법이 효과적이지만, 특히 트랙 당 필드 당 8 배의 저장 공간을 의미하기 때문에 정말 대단한 것처럼 보입니다.

누구에게 더 좋은 아이디어가 있습니까? 감사!

+0

"7 개의 추가 항목 유지"는 "7 개의 추가 속성 유지"를 의미합니까? –

+0

네, 고마워요. 나는 여분의 7 db를 유지해야했다 .IntegerProperty. 그러나 Peter는 아래를 지적하여 하나의 ListProperty로 만들 수 있습니다. – DrTall

답변

0

일일 롤링 7 일 델타가 있어야하므로 지난 7 일 동안 데이터를 보관해야합니다. 그래서 당신이 이미하고있는 것이 올바른 방법 인 것 같습니다.

"거친 느낌"을 줄이려면 Foo1..Foo7을 list property으로 만들 수 있습니다.