2009-08-27 18 views
0

Google App Engineデータストアを使用してテーブルを結合する方法がないので、エンティティのリストをループし、外部キー値を使用して関連エンティティを1つずつルックアップします。Google App Engine/JDO:セッションキャッシュがありますか?

for (Employee staff: staffList){ 
    Employee manager = pm.getObjectById(Employee.class, staff.getManagerId()); 
}  

私は何度も同じ参照エンティティを必要とするだろう、と私は同じエンティティのために二回のデータストアに行きたくないことを良いチャンスがあります。

重複した検索を排除するために使用できるセッションキャッシュがありますか?それとも自分自身をロールバックする必要がありますか?

答えて

1

JDOはスペックがApp EngineのJDO機能でヘルプを提供datanculeus、によると、PersistenceManagerの内のインスタンスのキャッシュを強制行います。しかし、私は不足しているいくつかのものがまだあるARESことを知っている

link to datanucleus cache page

をAppEngineの実装から、ここに述べたように:

app engine unsupported features

良いニュースは、キャッシングがそのリスト上にあるようには見えないということです。悪いニュースは、レベル1のキャッシュが実装されているという確認を見つけることができなかったことです。テストするのは難しいことではありません.100種類のエンティティを取得してから、100回同じエンティティを取得するまでに時間をかけてください。

+0

私はそれを試してみます。おそらく、APIを呼び出すためにGoogleから請求されるため、時間を節約する必要はありません。したがって、実際にページがクォータの要約で行ったコールの数を確認できます。 – Thilo

+0

素晴らしい!あなたは次の人にいくつかのトラブルを保存することができますので、それがどのように働いたか教えてください! –

+1

L1およびL2キャッシングはDataNucleusの "コア" jarにあるため実装されています。 L2キャッシングはデフォルトでは有効になっていません – DataNucleus

関連する問題