11

リレーショナル データベースがサポートする優れた機能の 1 つは、count、sum、avg などの集計関数です。しかし、GAE を使用している場合、レコードを挿入または更新するときに、count、sum、avg などを計算して保存する必要があるようです。テーブル全体の値。しかし、条件付きグループが多数ある場合はどうなるでしょうか。与えられた人:

class Person {
    @Id
    Integer age;
    String city;
}

私がしたい場合

  1. 総人数と
  2. 平均年齢

個人を作成、更新、または削除するたびに、両方の集計を計算し、同じテーブルに別々の列として保存する必要があります。都市ごとの合計値と平均値も必要な場合、都市ごとにこれらの値を同じテーブルに別々の列として保存する必要がありますか?

4

2 に答える 2

6

右:GAEストレージを適切に使用するには、モデルの一部の側面を選択的に非正規化し、「冗長」データを保持する必要があります。このデータは、通常の形式のDBで、集計(全体および「 「1つでグループ化)。

ただし、このようなフィールドをPersonテーブルに追加しないでください。ほとんど意味がありません。PersonAggregatesCity(null /全体の合計が欠落)、Count、TotalAges(保守が簡単:合計をカウントで割った値としていつでも平均を計算)などの列を含む別のテーブルを作成します。

于 2009-06-14T16:04:40.197 に答える
3

頻繁に使用される集約の場合、更新/挿入/削除のたびにそれらを更新するのが最善です。

このような集計を最初からアプリケーションに設計していない場合は、Remote DataStore APIを介してスクリプトを実行するか、すべてのエンティティを処理して集計を計算するサーバー側のcron ジョブを設定できます 。かなり簡単ですが、リクエストごとの CPU クォータに注意してください。

于 2009-06-14T16:22:04.803 に答える