我正在使用Google App Engine的数据存储区(DataNucleus)。我有两个班,一个聊天和一个评级。聊天可以被评为更多,所以我通过向聊天类添加列表创建了一对多的关系。
现在我想知道未分级聊天的数量,所以我做了以下事情:
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 EXPERT的反应:
这是Google的插件,他们对此负责(事实上他们没有实现该方法是他们的问题......我确信他们的数据存储提供了一种获取集合大小的方法)。他们的插件只使用DataNucleus 1.1,我们目前正在开发2.2,所以,你可以猜到,我们没有太多时间用于GAE / J环境。
为什么谷歌使用1.1版本?
答案 0 :(得分:0)
您应该在聊天模型上保留评分数。然后,您可以运行查询以选择0评级的所有聊天。