我正在使用谷歌应用引擎开发软件。

我对以下问题的优化设计有一些考虑:我需要定期创建和保存某些实体的快照。

在传统的关系数据库世界中,我将创建db作业,这将插入新的摘要记录。

例如,作业将为每个活动用户插入一条记录,该记录将包含他的当前分数给“userrank”。比如每小时一桌。

我想知道在谷歌应用引擎中实现这一目标的最佳方法是什么。我知道有Cron服务,但它是否允许我们执行插入/更新数千条记录的作业?

其他提示

我认为你会发现,无论你的框架是什么,每小时快照每个用户的状态都不会很好。更普通的环境会让你有更长时间的运行任务来掩盖这一点,但你仍然会达到每小时拍摄每个用户数据的快照是不切实际的。

我的建议是这样的:添加一个'last snapshot'字段,并继承你模型的put()函数(假设你正在使用Python;在Java中也是如此,但我不知道语法),这样无论何时更新记录,它都会检查自上次快照以来是否超过一小时,如果是,则创建并写入快照记录。

为了防止并发更新创建两个相同的快照,您需要为快照提供从拍摄快照的时间派生的密钥名称。这样,如果两个并发更新尝试编写快照,则会无害地覆盖另一个。

要获取给定小时的快照,只需查询比请求的时间段更新的最旧快照。作为一个额外的好处,因为非活动记录没有快照,所以你也节省了很多空间。

我会在此处详细介绍Cron作业和循环网址获取方法的组合: http:// stage.vambenepe.com/archives/549 。通过这种方式,您可以捕获超时并开始另一个请求。

总结一下这篇文章,cron作业调用你的初始进程,你捕获超时错误并再次调用进程,屏蔽为第二个url。您必须在两个URL之间执行ping操作,以防止应用引擎认为您处于意外循环中。您还需要注意不要无限循环。确保更新循环有一个结束状态,因为如果它从未结束,这会很快超过您的配额。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top