java 谷歌数据库聚合查询

56lgkhnf  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(131)

我已经阅读了很多关于在数据存储上进行聚合查询的方法(通过stackoverflow和其他地方),大多数答案是不能以一种令人愉快的方式进行,但是这些答案都是过时的,同样的人也倾向于声称你不能在数据存储上进行order by之类的操作。
现在,您实际上可以在数据存储上指定ORDER BY,所以我想知道聚合是否也是可能的。
考虑这样的场景,我有五个候选人阿尔法,勇敢,查理,德尔塔和回声;和10,000个投票者。我想检索候选人和每个人收到的选票数量。我如何在数据存储上做到这一点?我正在使用java。
另外,顺便说一句,如果答案仍然是否定的,而扇入是我最好的选择:扇入是线程安全的吗?扇入的意思是保留一个显式计数器来计算每个候选人收到的选票(在一个单独的table中)。当多个用户同时投票时,我是否会遇到争用条件或数据中的其他错误?

0s7z1bwu

0s7z1bwu1#

如果您所说的聚合是指让数据存储为您计算投票总数,那么不,数据存储不会这样做。
实现您所描述的最佳方法是:

  • 为每个候选人创建一组分片计数器(谷歌搜索应用引擎分片计数器)。
  • 当有人投票时,更新给定代理的分片计数器。
  • 当您想要读取投票时,查询您的代理,然后查询每个代理的分片计数器并将它们相加。
  • Memcache以获得更好的性能,文档中提供的GAE分片计数器示例很好地说明了这一点。
2ic8powd

2ic8powd2#

其最近发布并可供使用:https://cloud.google.com/datastore/docs/aggregation-queries.
还有各种客户端库也支持此特定功能。

相关问题