使用Google App Engine进行高频数据刷新

时间:2016-02-04 16:29:09

标签: android google-app-engine cron

我正在为Android客户端使用GAE开发服务,并且需要定期刷新应用程序数据,比如说每分钟一次。

在架构方面,这就是应用程序的工作方式:

  • 用户启动应用并从GAE上运行的服务中检索市场数据
  • GAE服务本身调用外部Web服务来检索市场数据,过滤结果并发送给用户显示
  • 市场价格应每分钟更新一次

我知道GAE为自动计划任务提供cron作业,但据我所知,它不适合这种高频任务(或者甚至不支持)

我可以用于此用例的最佳做法/工具是什么?

此外,无论应用程序是否打开,是否建议在后台更新数据?或者只是在用户启动后立即更新?

[编辑]我还想知道是否每分钟提取数据是正确的方法,还是应该推动服务呢?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

"it's not suitable for such high frequency tasks (or not even supported)" - 这不完全正确。

Cron作业可以低至1分钟的间隔运行,请参阅The schedule format

  

以下是时间表示例:

every 12 hours
every 5 minutes from 10:00 to 14:00
every day 00:00
every monday 09:00
2nd,third mon,wed,thu of march 17:00
1st monday of sep,oct,nov 17:00
1 of jan,april,july,oct 00:00
     

如果您不需要在特定时间运行定期作业,但是   而只需要定期运行它,使用以下形式:

every N (hours|mins|minutes) ["from" (time) "to" (time)]

因此,间隔1分钟,您可以使用:

every 1 minutes

如果您需要的间隔时间少于1分钟,则可以使用the deferred library - 任务可以从排队时刻延迟,并以秒为单位指定时间值:

  

deferred.defer(do_something_expensive,“Foobie bletch”,12,    _countdown = 30 ,_queue =“myqueue”)

上一个问题的答案实际上取决于您希望应用程序的行为方式:在客户端应用程序启动时让客户端应用程序立即可用数据,或让客户端应用程序等到后端收集数据。

如果您只是将收集到的数据转发给客户端,无论哪种方式都没有问题,那么就没有“常规做法”(当然,除了不断更新的成本更高)。但是,如果您计划提供处理历史数据的结果,您可能需要不断更新(或者只是在市场营业时间内)。

<强>更新

Task Queues优于延迟库,使用taskqueue.add()的可选countdowneta参数可以使用延迟功能:

  
      
  • 倒计时 - 此任务应运行或租用的未来秒数。默认为零。如果,请不要指定此参数   你指定了一个eta。

  •   
  • eta - 一个datetime.datetime,指定任务运行的绝对最早时间。如果,则无法指定此参数   指定了倒计时参数。这个论点可以是时间   区域感知或时区天真,或设置为过去的时间。如果   参数设置为None,默认值为now。对于拉动任务,没有   工人可以在eta指示的时间之前租用任务   参数。

  •