如何对Google Datastore中的很多实体进行总计?

我想了解Google数据存储是否可以满足我的需求。

我有很多的实体,我需要对某个财产进行总计。 基本上,我希望能够select count(value1) from entity1 where [some filter] ,entity1是一个实体,用于跟踪其字段/属性value1某种数据。

我知道这些types的函数在数据存储中不可用,因为它不是关系数据库,所以最直接的解决scheme是执行一个select ,然后计算应用程序中结果集的总和。 所以我会喜欢(使用nodejs,但我不在乎语言):

 query = client.query(kind='Task') query.add_filter('done', '=', False) results = list(query.fetch()) total = 0 for(v in results) total += v.value 

问题是我有成千上万的logging,所以结果可能就是300000条logging。

什么是最好的方式来做到这一点,而不是一个瓶颈?

您可以将总和存储在一个单独的实体中。 无论用户请求的频率如何,您都可以在几毫秒内将其返回。

当总共包含的实体发生变化时,您将更改总体实体。 例如,如果一个属性从300更改为500,那么总数将增加200.这样,您的总数总是准确的。

如果更新非常频繁,则可以将这些更新作为任务(Task Queue API)实施,以防止竞争条件。 这些任务会很快执行,所以你的用户在每次询问时都会得到非常“新鲜的”。

也许最好的办法来指望谷歌数据存储是官方的解决scheme: 碎片计数 。