Google AppEngine:如何计数超过1000的数据库条目?

12 投票
5 回答
6433 浏览
提问于 2025-04-15 11:17

重复问题 “在Google App Engine中,如何获取数据存储模型中的行数?”


我想知道我有多少用户。之前,我用以下代码来实现这个目标:

users = UserStore.all()
user_count = users.count()

但是现在我有超过1000个用户,而这个方法仍然只返回1000。

有没有更有效的方法来知道我有多少用户呢?

5 个回答

2

从SDK的版本1.3.6开始,之前对计数功能的1000个限制已经取消了。现在调用计数功能时,它会返回确切的实体数量,即使超过1000个也没问题。唯一的限制是,如果你的实体数量太多,以至于计数功能在请求超时之前无法返回结果,那就会有问题。

2

使用分页功能,可以参考这些例子 这里

14

这确实是个重复的问题,之前的帖子讲了理论上的做法,但我想强调的是,你真的不应该用这种方式来计算数量。原因是,BigTable由于其分布式的特性,对于聚合操作(比如统计总数)来说效果很差。你可能想要做的是给那个实体添加一个事务计数器,如果有很多事务的话,可以使用分片计数器。具体可以参考这个链接:http://code.google.com/appengine/articles/sharding_counters.html

更新:从1.3.1版本开始,使用游标(cursors)可以让这类操作简单很多:http://code.google.com/appengine/docs/python/datastore/queriesandindexes.html#Query_Cursors

撰写回答