我正在使用 Google App Engine (DataNucleus) 的数据存储区。我有两个课程,一个聊天和一个评级。一个聊天的评分可以超过一个,所以我通过在 Chat 类中添加一个列表来创建一对多的关系。
现在我想知道未评级聊天的数量,所以我做了以下事情:
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 专家的编辑反应:
这是谷歌的插件,他们对此负责(他们没有实现该方法的事实是他们的问题......我确信他们的数据存储提供了一种获取集合大小的方法)。他们的插件仅使用 DataNucleus 1.1,而我们目前正在开发 2.2,因此,您可以猜到,我们没有太多时间用于 GAE/J 环境。
为什么 google 使用 1.1 版本?