1

私のクエリの 1 つは、ユーザー入力に応じて、さまざまなフィルターと並べ替え順序を取ることができます。これにより、50 以上のインデックスを含む巨大な index.yaml ファイルが生成されます。

多くのブール値および複数選択 (文字列) プロパティを単一の文字列リスト プロパティに非正規化することを考えています。このようにして、クエリの組み合わせの数を減らします。ほとんどのクエリは文字列リスト プロパティにフィルターを追加するだけであり、インデックス カウントが劇的に減少するはずだからです。

確かにストレージ サイズは増えますが、それほど多くのデータがないため、これは実際には問題ではありません。

これは良いアイデアのように聞こえますか、それともこのアプローチには他に欠点がありますか?

4

3 に答える 3

3

いつものように、これはエンティティのクエリ方法によって異なります。このようなプロパティのリストに対して実行できるクエリのほとんどの場合、App Engine には自動的に作成されたインデックスが既に含まれているため、app.yaml で指定する必要はありません。同様に、複合インデックスを必要とする実行したいクエリのほとんどは、リスト プロパティでは実行できないか、そのリスト プロパティで「爆発」インデックスを必要とします。

このオブジェクトに対して通常実行するクエリの種類について詳しく教えていただければ、より具体的なアドバイスを提供できます。

于 2011-01-27T04:08:57.500 に答える
2

データを非正規化してインデックスの数を減らすことは、良いトレードオフのように思えます。必要なインデックスの数を減らすと、更新するインデックスが少なくなります (ただし、1 つのインデックスでより多くの更新が行われます)。これが GAE のパフォーマンスにどのように影響するかは不明です。もちろん、元のフィールドをそのままにしておくとサイズが大きくなります (文字列リスト プロパティにデータをコピーしているため) が、エンティティがすでにかなり大きい場合を除き、これはそれほど重要ではない可能性があります。

リストのインデックスには、エンティティごとに 1 つのエントリではなく、各エンティティのリスト内の要素ごとに 1 つのエントリが含まれるため、これは少し複雑です。これは確かにスペースとクエリのパフォーマンスに影響します。また、複数のリスト プロパティを含むインデックスを作成しないように注意してください。そうしないと、インデックスの爆発の問題が発生する可能性があります (複数のリスト プロパティ => 各リストの値の組み合わせごとに 1 つのインデックス エントリ)。

試してみて、実際にどのように機能するかを確認してください ( AppStatsを使用してください!)。

于 2010-07-21T19:45:39.777 に答える
0

「確かにストレージ サイズは増えますが、それほど多くのデータがないため、これは実際には問題ではありません。

これが本当なら、非正規化する理由はありません。

于 2011-01-26T02:40:31.213 に答える