代码之家  ›  专栏  ›  技术社区  ›  Manjoor

bigtable需要锁定吗?

  •  2
  • Manjoor  · 技术社区  · 14 年前

    我的queue.xml文件如下所示

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

    我的队列处理servlet为每个任务减少1的信用。 在处理过程中,需要检查信贷可用性和

    信用卡存储在一个表中,当任务完成时它会被更新。

    我把任务看作线程,担心同步问题。

    如果是,那么如何?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Wim    14 年前

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

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

        2
  •  0
  •   Nick Johnson    14 年前