我正在使用 Google App Engine 开发软件。
我对以下问题的优化设计有一些考虑:我需要定期创建和保存一些实体的快照。
在传统的关系数据库世界中,我会创建插入新摘要记录的数据库作业。
例如,一项工作会为每个活跃用户插入一条记录,其中包含他当前的分数到“userrank”表,比如说,每小时。
我想知道在 Google App Engine 中实现此目标的最佳方法是什么。我知道有 Cron 服务,但它是否允许我们执行将插入/更新数千条记录的作业?
最佳答案
我想您会发现,无论您的框架是什么,每小时对每个用户的状态进行快照都无法很好地扩展。一个更普通的环境会通过让您有更长时间运行的任务来掩饰这一点,但您仍然会达到每小时为每个用户的数据拍摄快照是不切实际的地步。
我的建议是:添加一个“last snapshot”字段,并将模型的 put() 函数子类化(假设您使用的是 Python;这在 Java 中也是可能的,但我不知道语法),这样每当您更新记录时,它都会检查自上次快照以来是否已超过一个小时,如果是,则创建并写入快照记录。
为了防止并发更新创建两个相同的快照,您需要为快照提供一个从拍摄快照的时间派生的键名。这样,如果两个并发更新尝试写入快照,一个将无害地覆盖另一个。
要获取给定时间的快照,只需查询比请求的时间段更新的最旧快照。作为一个额外的好处,由于不活动的记录没有快照,您也节省了大量空间。
关于python - Google App Engine - 关于 cron 任务的设计注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/814896/