我有一种在Google Cloud Datastore中拥有大约500万个实体的类型。我想用Java编程获得这个计数。我尝试了下面的代码,但它的工作达到一定的阈值(800K)。当我运行查询5M记录时,它进入无限循环(我猜),因为它不返回任何计数。如何获取这些大数据的实体数量?我不想使用Google App Engine API,因为它需要设置环境。
private static Datastore datastore;
datastore = DatastoreOptions.getDefaultInstance().getService();
Query query = Query.newKeyQueryBuilder().setKind(kind).build();
int count = Iterators.size(datastore.run(query)); //count has the entities count
3条答案
按热度按时间r6vfmomb1#
你需要多精确的计数?对于稍微过时的计数,您可以使用stats entity来获取某个种类的实体数量。
如果你不能使用stats实体中的过时计数,那么你需要保留计数器实体来进行你需要的真实的计数。您应该考虑使用sharded counter。
nqwrtyyt2#
查看Google Dataflow。下面这样的管道应该可以做到这一点:
我用python,但他们也有一个Java sdk https://beam.apache.org/documentation/programming-guide/
唯一的问题是,您的流程必须触发这个管道,让它自己运行几分钟,然后让它点击一个回调URL,让您知道它已经完成了
yrwegjxp3#
COUNT aggregation in datastore现在通常可用。
有多种语言的客户端库支持此特定功能。
使用此功能,用户可以避免执行客户端聚合,这增加了出口成本的额外负担。也不需要使用像云函数这样的替代方案来更新后端的聚合值,这本身是一个成本限制。