App Engine数据存储区获取多个父项的子项数

时间:2010-10-26 12:14:19

标签: google-app-engine google-cloud-datastore datanucleus

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

1 个答案:

答案 0 :(得分:0)

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