1

我正在使用 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 版本?

4

1 回答 1

0

您应该在聊天模​​型上保留评分计数。然后,您可以运行查询以选择所有评分为 0 的聊天。

于 2010-10-26T15:11:33.760 回答