java - bigtable需要锁吗?

标签 java google-app-engine task-queue

我正在使用任务队列来更新 GAE 中的某些数据。

我的queue.xml 文件如下所示

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

我的队列处理 servlet 将每个任务的信用值减少 1。 在处理时需要检查信用可用性和 仅当信用可用时才继续进行。

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

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

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

最佳答案

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

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

关于java - bigtable需要锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083591/

相关文章:

python - uwsgi spooler 的执行模型是什么?

http - golang : strategies to prevent connection reset by peer errors

java - AppEngine 连接的 Android 项目中的注释失败

java - Array.toString() 方法仍然打印出空值

java - 如果变量没有数据尝试另一个?

java - 使用 Webjars 和 Spark 导入静态 jQuery JS 文件

java - GAME更新实体中的空指针

eclipse - 使用 eclipse 插件的新谷歌附加的空指针异常

python - 从 App Engine 数据存储到 JSON 的分层数据输出?

java - 如何在队列中使用Handler Postdelayed?