bigtable需要锁定吗?

Man*_*oor 2 java google-app-engine task-queue

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

我的queue.xml文件如下所示

  <queue> 
    <name>data-processing</name> 
    <rate>20/s</rate> 
  </queue> 
Run Code Online (Sandbox Code Playgroud)

我的队列处理servlet为每个任务减少1.在处理过程中,它需要检查信用可用性,并且只有在可用信用额度时才能继续进

信用存储在表中,并在任务完成时更新.

我认为任务是线程并担心同步问题.

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

Wim*_*Wim 5

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

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