2

我在 GAE 中使用任务队列进行某些数据更新。

我的 queue.xml 文件如下所示

  <queue> 
    <name>data-processing</name> 
    <rate>20/s</rate> 
  </queue> 

我的队列处理 servlet 将每个任务的信用减 1。在处理时,它需要检查信用可用性,只有在信用可用时才继续进行。

积分存储在表格中,并在任务完成时更新。

我将任务视为线程并担心同步问题。

如果两个或多个任务同时查询/更新信用表怎么办?我需要创建一些锁定机制吗?如果是,那怎么办?

4

2 回答 2

5

是的,您确实需要同步。您通常会在读-修改-写方案中更新学分:首先读取可用学分,减去一个,然后将剩余学分写回。如果两个任务同时执行此操作,一个任务可能会覆盖另一个任务的结果,从而导致存储的信用计数不正确。(除非有一个原子指令,它确实存在于 Memcache 中,但不存在于我相信的 Data Store 中)。

您可以使用事务来解决此问题,请参阅http://code.google.com/appengine/docs/java/datastore/transactions.html

于 2010-06-21T10:03:29.127 回答
0

App Engine 任务队列负责计算执行率本身。除了配置 queue.xml 之外,您无需执行任何操作。

于 2010-06-21T11:31:09.513 回答