进行对象类型的全局计数(如用户),最佳做法?

时间:2010-04-21 14:31:44

标签: java google-app-engine

我知道在app引擎中保持全局计数器不受欢迎。我有兴趣获得一些统计数据,比如每24小时一次。例如,我想每24小时计算一次系统中的User对象数。

那我们该怎么做呢?我们只是保留一组管理工具函数,它们可以执行以下操作:

SELECT FROM com.me.project.server.User;

然后看看返回List的大小是多少?这有点无聊,因为数据存储区必须反序列化每个用户实例以创建返回的列表,对吗?

我可以通过仅要求返回键来优化它,因此不必反序列化整个User对象。

然后,用户数量的全局计数器可能会产生太多争用,因为我正在创建的服务每分钟可能不会有数百次注册。

我们应该怎么做呢?每天获得一次用户总数可能是一个非常典型的操作吗?

谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用datastore statistics API来确定有多少用户对象。如果您有超过1,000个用户,这可能比使用游标更容易(也更快)。

答案 1 :(得分:0)

如果你只关心每天检查一次,我就不会费心保持运行计数。

User.all().count()将有效,直到您达到1000个用户(count()仅限于1000个实体)

对于超过1000个用户的查询,您可以使用cursor,使用游标一次查询1000以启动您中断的下一个查询,并在结果计数小于1000时停止