0
4

3 に答える 3

0

Userクラスには、ユーザーごとに一意のID(ユーザー名や電子メールアドレスなど)を設定します。Wordクラスの場合、各Wordクラスの親を特定のユーザーとして設定します。

したがって、特定のユーザーからの単語を検索する場合は、その特定のユーザーに属するすべての単語に対して祖先クエリを実行します。

ユーザーごとにIDを設定することで、追加のクエリを実行するのではなく、IDごとにそのユーザーを取得できます。

祖先クエリの詳細: https ://developers.google.com/appengine/docs/java/datastore/queries#Ancestor_Queries

IDの詳細: https ://developers.google.com/appengine/docs/java/datastore/entities#Kinds_and_Identifiers

于 2012-11-07T17:13:02.890 に答える
0

それは本当にあなたが使っているクエリに依存します。私はあなたが特定の所有者に与えられたすべての単語を見つけたいと思います。

クエリを実行する代わりにユーザーエンティティをフェッチする必要があるため、おそらく2の方が安価です。

リストをWordのインスタンスと手動で同期させる必要があるため、2は少し手間がかかります。

頭のてっぺんから、#2の2つの問題について考えることができます。これは、あなたに当てはまる場合と当てはまらない場合があります。

A.特定の単語が与えられたすべての所有者を検索する場合は、その単語のリストをインデックスに登録しておく必要があります。これはあなたの費用に影響します。ほとんどの場合、所有者ごとに単語を検索し、単語ごとに所有者を検索することはめったにない場合でも、この方法で検索するのは理にかなっています。ただし、検索パターンが反転し、単語で所有者を頻繁に検索している場合、これは間違ったデザインである可能性があります。ご覧のとおり、使用するクエリに基づいてモデルを設計する必要があります。

B.エンティティは1MBに制限されており、インデックス付けされたプロパティの数には制限があります(5000だと思いますか?)。これらの2つは、リストに保存できる単語の数を制限します。ユーザーあたりの単語数の制限を超えないようにしてください。方法1では、ユーザーごとに無制限の単語を使用できます。

于 2012-11-07T17:57:09.617 に答える
0

答えは appstats を使用することで、次のことがわかります。

AppStats

アプリケーションの速度を維持するには、次のことを知っておく必要があります。

アプリケーションが不要な RPC 呼び出しを行っていませんか? 同じデータを取得するために繰り返し RPC 呼び出しを行うのではなく、データをキャッシュする必要がありますか? 複数のリクエストを順次ではなく並行して実行すると、アプリケーションのパフォーマンスが向上しますか?

いくつかのテストを実行し、両方の方法を試して、appstats の内容を確認してください。

しかし、何百万ものエンティティを検索する必要がないという理由だけで、オプション 2) の方が優れていると思います。しかし、誰が確実に知っていますか?問題は、アプリエンジンの「リソース」が多数の異なるものであることです-CPU、データストアの読み取り、データストアの書き込みなど。

于 2012-11-07T16:57:10.660 に答える