【问题标题】:Does bigtable need locking?bigtable 需要加锁吗?
【发布时间】:2010-06-21 09:49:32
【问题描述】:

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

我的 queue.xml 文件如下所示

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

我的队列处理 servlet 将每个任务的信用减 1。 在处理它需要检查信用可用性和 只有在有信用额度的情况下才能继续进行。

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

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

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

【问题讨论】:

    标签: java google-app-engine task-queue


    【解决方案1】:

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

    你可以使用事务来解决这个问题,见http://code.google.com/appengine/docs/java/datastore/transactions.html

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多