谷歌数据存储聚合查询

时间:2013-05-30 21:35:03

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

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

如今,您实际上可以在datastore上指定ORDER BY。所以我想知道聚合是否也可能。

考虑我有五个候选人Alpha,Brave,Charie,Delta和Echo的场景;和10,000名选民。我想检索候选人和每个按顺序收到的票数。我如何在数据存储区上执行此操作?我正在使用java。

另外,顺便说一句,如果答案仍然没有,并且扇入是我最好的选择:扇入线程安全吗?通过扇入,我的意思是保留一个明确的计数器来计算每个候选人收到的投票(在单独的table中)。当多个用户同时投票时,我可以在数据中遇到竞争条件或其他一些错误吗?

1 个答案:

答案 0 :(得分:1)

如果通过聚合来表示让数据存储区为您计算总投票数,那么数据存储区将不会这样做。

执行您所描述的内容的最佳方式是:

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