对象化计算数据存储中的所有实体

objectify count all entities in datastore

我正在使用 objectify v6。我想计算我的数据存储区中所有实体的数量。数据存储 https://cloud.google.com/datastore/docs/concepts/limits 中的查找操作似乎存在限制。

在我的数据存储中,我有 2000 个实体,当我这样做时

ObjectifyService.ofy().load().type(MyEntity.class).keys(); 

这有效,没有错误,但是当我这样做时

ObjectifyService.ofy().load().type(MyEntity.class).list() 

这让我出错,说查询有限制,这是否意味着我可以通过计算所有键来计算所有实体的数量?

当然,您可以使用 keys()... 计算您同类中的所有实体,直到您 运行 遇到同样的问题,即您的查询花费的时间太长。我不知道你能走多远,但我怀疑你会达到数百万。这种方法可能只适用于数千人。

数据存储中没有 SELECT COUNT(*) 的良好等效项。如果您需要最新的答案,您可以在分片计数器中跟踪添加和删除。如果你只需要一个近似值,你可以使用 map/reduce(参见 __scatter__ 属性)或者你可以只查看 Google 定期重新计算的统计数据:

https://cloud.google.com/datastore/docs/concepts/stats