统计数据存储区Google应用引擎中的实体

时间:2014-01-07 14:15:16

标签: java google-app-engine

在我的GAE申请表中,我有一项调查。例如,一个问题是“你住在哪里?”。 如果我们使用谷歌留言板示例应用程序,密钥将是留言簿,并在此我创建了较小的键,如地址,内容2,内容3。我发布或检索个别结果没有问题,例如:“Fred MALE 24 Tokyo”“content1,gender,age,place”。但是,在另一页上,我想显示参加调查的人数; 10人回答了调查问题 - 3名男性7名女性。我还想展示一些结果,例如“10人回答了东京的调查”。有人可以通过数据存储区解释一种计算方式吗?如果您的回答是在Google的留言板示例或GAE的另一个简单示例中,那么它也会有所帮助。お愿いします!

2 个答案:

答案 0 :(得分:2)

有计数,请参阅https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_count 但是请看那里的笔记。简而言之:

  1. 其时间与计算的元素数量成正比

  2. 如果你有很多元素,它会因为(1)而超时,所以你需要使用限制一个paginate客户端。

  3. 它比迭代更快,但是通过一个常数因子(因为#1)

  4. 对于许多元素,您的方向是使用mapreduce之类的东西,使用cloud sql(最简单但是$)或自己维护计数,通常使用分片和/或使用memcached来提高性能并大大降低同时操作的可能性丢失数据(因为memcached支持原子加法操作)

答案 1 :(得分:1)

你的意思是像 -

这样的查询

从性别='M'的问卷中选择计数(*)

我不认为您可以从GAE数据存储中返回

选项是 -

  • 从查询中返回一个列表并输出其大小

    @SuppressWarnings("unchecked")
    
    public List<Users> Users() {
    
        PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();
    
        String query = "select from " + User.class.getName();
    
        return (List<User>) pm.newQuery(query).execute();
    
    }
    
  • 维护数据存储区中这些字段的计数