2013-05-30 246 views
0

我一直在阅读很多关于在数据存储(通过stackoverflow和其他地方)进行聚合查询的方式。答案的优势在于它不能以愉快的方式完成。但是那些答案是过时的,同样的人也倾向于声称你不能在数据存储上做诸如order by的事情。谷歌数据存储聚合查询

因为它存在的今天,你其实可以指定在datastoreORDER BY。所以我想知道聚合是否也是可能的。考虑我有五个候选人阿尔法,勇敢,沙利,三角洲和回声的情景;和10,000名选民。我想检索候选人和每个收到的票数。我将如何在数据存储上做到这一点?我正在使用java。

而且,顺便说一句,如果答案是还没有和煽动式是我最好的选择:是扇入线程安全的?我的意思是保留一个明确的计数器来计算每个候选人收到的投票数(单独的table)。当多个用户同时投票时,我可能会遇到竞争状况或数据中的其他错误吗?

回答

1

如果通过聚合您的意思是指让数据存储为您计算总票数,那么否,数据存储不会这样做。

做你描述的最佳方式是:

  • 创建一组候选每分片计数器(谷歌搜索应用程序引擎分片计数器)。
  • 当有人投票时,更新给定委托的分片计数器。
  • 当您想要阅读投票时,查询您的代表,然后为每个代表查询分片计数器并对其进行总结。
  • Memcache为获得更好的性能,文档中提供的GAE分片计数器示例非常好地显示了这一点。
+0

感谢您的分片计数器思想。 +1。但问题是,如果我使用分片,我将无法对我的候选人打'ORDER BY'投票。 –

+0

如果您不担心表现,您可以在实际的候选实体中保留投票计数,然后您可以执行ORDER_BY。否则,你不能。但是,在你计算好数字之后排序自己是微不足道的。 – dragonx