1

使用しているPOSTリクエストの読み取り/書き込みカウントを最適化する必要があります。

リクエストに関する情報:

  • ユーザーは最大100アイテムのJSON配列を送信します
  • サーブレットは、単一のlong属性を使用して、受信したアイテムのいずれかがデータストア内の対応するアイテムよりも新しいかどうかを確認する必要があります
  • JDOを使用しています

私が現在していることは(擬似コード):

 foreach(item : json.items) {
     storedItem = persistenceManager.getObjectById(item.key);
     if(item.long > storedItem.long) {
         // Update storedItem
     }
 }

これは明らかに、リクエストごとに最大100の読み取りリクエストになります。

このロジックの読み取りカウントを減らすための最良の方法は何ですか?JDOを使用していQueryますか?「IN」を使用すると、クエリが次々に実行される複数のクエリが発生するだけなので、それが役に立たないと思います:(

もありPersistenceManager.getObjectsById(Collection)ます。それは何らかの形で役立ちますか?これが発行するリクエストの数に関するドキュメントが見つかりません。

4

2 に答える 2

1

以下の呼び出しを使用して、バッチ取得を実行できると思います。

Query q = pm.newQuery("select from " + Content.class.getName() + " where contentKey == :contentKeys");   

上記のクエリのようなものは、必要なすべてのオブジェクトを返します。そして、あなたはここから残りすべてを扱うことができます。

于 2012-05-31T08:53:32.367 に答える
0

最善の策は

pm.getObjectsById(ids);

これは、呼び出しで複数のオブジェクトを取得することを目的としているためです(特に、ID、つまりキーがあるため)。確かに、現在のコード(2.0.1以降)は、getEntities()に対して単一のデータストア呼び出しを実行する必要があります。この問題を参照してください

于 2012-05-31T07:39:30.283 に答える