Google app engine (ilures)至于索引,我相信select count(*)几乎和获取这些实体一样昂贵;()它仍然需要逐个计算。你还应该为每个答案创建一个实体,而不是为每个调查创建一个实体;我的直觉是它最终会花更多的钱,但我不确定。谢谢尼克。MapReduce听起来很有

Google app engine (ilures)至于索引,我相信select count(*)几乎和获取这些实体一样昂贵;()它仍然需要逐个计算。你还应该为每个答案创建一个实体,而不是为每个调查创建一个实体;我的直觉是它最终会花更多的钱,但我不确定。谢谢尼克。MapReduce听起来很有,google-app-engine,indexing,google-cloud-datastore,Google App Engine,Indexing,Google Cloud Datastore,(ilures)至于索引,我相信select count(*)几乎和获取这些实体一样昂贵;()它仍然需要逐个计算。你还应该为每个答案创建一个实体,而不是为每个调查创建一个实体;我的直觉是它最终会花更多的钱,但我不确定。谢谢尼克。MapReduce听起来很有希望,但我担心每次生成报告时都会处理太多实体(从而耗尽我的配额)。我还可能错过实时摘要查看。你觉得动态切分怎么样?若并没有其他方法,那个么mapreduce似乎就是一种方法。@Hari Sharding增加了很多复杂性。我不知道你说的“动态”切


(ilures)至于索引,我相信
select count(*)
几乎和获取这些实体一样昂贵;()它仍然需要逐个计算。你还应该为每个答案创建一个实体,而不是为每个调查创建一个实体;我的直觉是它最终会花更多的钱,但我不确定。谢谢尼克。MapReduce听起来很有希望,但我担心每次生成报告时都会处理太多实体(从而耗尽我的配额)。我还可能错过实时摘要查看。你觉得动态切分怎么样?若并没有其他方法,那个么mapreduce似乎就是一种方法。@Hari Sharding增加了很多复杂性。我不知道你说的“动态”切分是什么意思。如果您担心重复工作,您可以编写自己的批量任务,只获取新实体以将它们添加到聚合中,或者您可以使用拉队列来实现相同的效果。
Survey sampleSurvey = ..
// get all respondents of above survey
List<Respondent> r = getAllRespondents(sampleSurvey);
// update summary per chosen question, answer
for each respondent:
    List<QuestionAnswer> qa = respondent.getChosenAnswers()
    for each chosen question, answer:
          // increments corresponding answer count by 1
          sampleSurvey.updateSummary(question.getId(), answer.getId()) 
// summary update done

// process summary
Summary summary = sampleSurvey.getSummary();
for each available question, answer:
    print 'No. of respondents who chose answer %s for question %s are %s' % (answer.text(), question.text(), answer.count())