bigtable需要锁吗?

发布于 2024-09-06 02:23:41 字数 391 浏览 6 评论 0原文

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

我的queue.xml 文件如下所示

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

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

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

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

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

I am using task queue for certain data updation in GAE.

My queue.xml file look like below

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

My queue processing servlet decrease credit by 1 for every task.
While processing it need to check for credit availability and
proceed further only if credit is available.

The credit is stored in a table and it get updated when a task is completed.

I see the tasks as threads and worried about synchonization problem.

what if 2 or more tasks query/update credit table simultaniously? Do i need to create some locking mechenism?
If yes then how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

十六岁半 2024-09-13 02:23:44

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

The App Engine task queue takes care of accounting for execution rate itself. You don't need to do anything other than configure queue.xml as you already have.

猥琐帝 2024-09-13 02:23:43

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

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

Yes you do need synchronization. You'll typically update the credits in a read-modify-write scheme: first read the available credits, subtract one, and write the remaining credits back. If two tasks do this at the same time, one may overwrite the result of the other leading to an incorrect credit count being stored. (Unless there's an atomic instruction for this, which do exist for Memcache, but not for the Data Store I believe).

You can use transactions to solve this, see http://code.google.com/appengine/docs/java/datastore/transactions.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文