Google App Engine Cron作业问题 - 批量更新

问题描述:

我有一个游戏系统的用户模型。需要每小时增加100点。Google App Engine Cron作业问题 - 批量更新

# the key_name is the userid in this case 
class User(db.Model): 
    points = db.IntegerProperty(default=0) 

因此应该准备一个处理程序,跨所有实体执行GQL查询? (那不是有500K有点慢 - 百万用户实体?)

如:

users = User.all() # if i'm not mistaken, only 1000 queries can be done. 
for user in users: 
    user.points += 100 
    db.put(user) 

我想使用伫列,并分片计数器,克服了1000 limiy,我可以把它关闭

但是再次说明,为什么我不把用户上次登录时的时间差,如果是N小时,我会奖励用户N * 100分?这应该减少我的应用程序的负载。

如: 类用户(db.Model): lastlogin = db.DateTimeProperty() 点= db.IntegerProperty(默认值为0)

你们觉得呢?

但是接下来为什么我不把用户上次登录时的时间差,如果是N小时,我会奖励用户N * 100分?这应该减少我的应用程序的负载。

是的,这是一个更有效的方法。这样,每次用户登录只更新一次点数,而不是每小时更新一次用户记录,这会非常昂贵。在这个

两个想法:

  • 不要担心500K - 1M用户条目。我不认识你或你的比赛,但如果你获得超过1K的比赛,我会感到非常惊讶。

  • 如果有一种算法分配一次而不是每小时分配一次,这将会更好。那肯定会那么做。问题出现了:用户在线时,这些点增量是否也增加了?如果是这样,你需要检查每一个动作。另一方面,如果你这样做,那么你不需要在登录时进行检查。

Paging through large datasets讨论这样搞技术 - 这是写在表格上显示每页X项目的背景,但其概念是相同的。

您可以通过将实际更新放入延期任务来进一步拆分工作。

但是,正如您所建议的那样,仅根据需要计算该值可能更有效。