Google App Engine(DataNucleus)のデータストアを使用しています。チャットとレーティングの2つのクラスがあります。チャットは複数の評価を受けることができるので、チャットクラスにリストを追加して1対多の関係を作成しました。
未評価のチャットの数を知りたいので、次のようにしました。
int numberOfChatsInStock = 0;
for(Chat chat : chats){
if(chat.getRatings().size() == 0){
numberOfChatsInStock++;
}
}
すべてのチャットを繰り返し処理し、評価の数が0であるかどうかを確認します。
このソリューションは、チャットが10回ある場合はうまく機能しますが、チャットが500回以上ある場合は、速度がひどいです(15秒以上)。
size()メソッドの方が速いのではないかと思いました。そこで、Query.setFilter( "ratings.size()== 0")を試しましたが、次のエラーが発生します。式の解析中にサポートされていないメソッド:InvokeExpression {[PrimaryExpression {ratings}]。size()}
速度を上げる方法はありますか?
DATANUCLEUS エキスパートからの反応の編集:
これはGoogleのプラグインであり、彼らが責任を負っています(そして、彼らがそのメソッドを実装していないという事実が彼らの問題です...彼らのデータストアはコレクションのサイズを取得する方法を提供すると確信しています)。彼らのプラグインはDataNucleus1.1のみを使用しており、現在2.2を開発しているため、ご想像のとおり、GAE/J環境にはあまり時間がありません。
なぜグーグルは1.1バージョンを使用しているのですか?