Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java bigtable需要锁定吗?_Java_Google App Engine_Task Queue - Fatal编程技术网

Java bigtable需要锁定吗?

Java bigtable需要锁定吗?,java,google-app-engine,task-queue,Java,Google App Engine,Task Queue,我在GAE中使用任务队列进行某些数据更新 我的queue.xml文件如下所示 <queue> <name>data-processing</name> <rate>20/s</rate> </queue> 数据处理 20/秒 我的队列处理servlet将每个任务的积分减少1。 在处理过程中,需要检查信用可用性和 只有在有信用证的情况下才能继续 积分存储在一个表中,并在任务完成时更新 我把

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

我的queue.xml文件如下所示

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

数据处理
20/秒
我的队列处理servlet将每个任务的积分减少1。 在处理过程中,需要检查信用可用性和 只有在有信用证的情况下才能继续

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

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

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

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


您可以使用事务来解决此问题,请参见应用程序引擎任务队列负责计算执行率本身。您不需要执行任何操作,只需按照已有的方式配置queue.xml