在谷歌应用引擎数据存储区中查询聚合(“分组依据”)的替代策略

时间:2010-10-08 04:51:21

标签: java sql google-app-engine google-cloud-datastore jdo

无法查询App Engine数据存储区以获得汇总结果。

实施例: 我有一个名为“Post”的实体,其中包含以下字段:

Key id,String nickname,String postText,int score

我的数据存储区中每个昵称都有许多不同的昵称和许多帖子。

如果我想要一个总分十大昵称的排行榜,我通常会有如下的SQL:

select nickname, sum(score) as sumscore
from Post 
group by nickname 
order by sumscore 
limit 10

在谷歌应用引擎数据存储区java api(jdo或jpa)中无法进行此类查询。

我可以使用哪些替代策略来获得类似的结果?

粗暴地,我可以加载每个Post实体并在我的应用程序代码中完全计算聚合。这对大型数据集来说显然效率不高。

我可以采用哪些其他策略?

1 个答案:

答案 0 :(得分:10)

创建Nickname模型,每次添加新帖子时,检索相应的昵称并在那里增加存储的分数总和。基本上,在插入/更新时进行计算,而不是查询时。