1

特定の Appengine Datastore フィールドから 7 日間の追跡統計を表示しようとしています。モデルに整数フィールド「Foo」がある場合、過去 7 日間の Foo の増加によって上位 N 個のモデルを見つけられるようにしたいと考えています。

例によって説明するのが最善だと思います。Foo フィールドを持つ 2 つのエンティティがあり、毎日午前 0 時に Foo の値をサンプリングするとします。

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

7日間のデルタを(毎日)構築できるようにしたい:

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 です。

誰かがより良いアイデアを持っていますか? ありがとう!

4

1 に答える 1

0

毎日ローリング 7 日間のデルタが必要なため、過去 7 日間すべてのデータを保持する必要があります。したがって、あなたがすでに行っていることは正しい方法のようです。

「グロスネス」を減らすには、Foo1..Foo7 をリスト プロパティにすることをお勧めします。

于 2012-08-08T10:24:16.637 に答える