【发布时间】:2011-04-03 04:20:10
【问题描述】:
我的问题很简单,但我对 Rails (以及 Web 编程)有点陌生,找不到好的答案。如何确保两个(或更多)数据库事务在 Heroku 上原子发生?
我能否像使用任何多线程应用程序一样使用互斥锁对应用程序进行编码,并期望它在 Heroku 等分布式服务器环境中正常工作?如果不是,那么确保两个或多个数据库事务的原子性的最佳方法是什么?
我知道 Heroku 使用 PostgreSQL,它可以让我获得一组数据库锁,但这些锁只持续一个事务。此外,我熟悉用于同步多线程应用程序的互斥锁(和 pthreads),但我不确定这些约定是否会在 Heroku 上按预期工作,尤其是当我的实际应用程序代码在多个服务器上运行时。
编辑
我绝对应该多解释一下我想要做的事情。我需要对数据库进行两次调用。第一次调用是读取一个布尔值。如果那个布尔值为真,我需要做一些动作,如果它是假的,我需要做一些别的事情。如果我读到 TRUE,那么我需要做一些其他的事情(与外部 API 的接口等......),如果成功,那么我需要将布尔值设置为 false。问题是我不知道如何避免多个客户端从数据库读取 true 的情况,而实际上,一个客户端正在写入 false 但尚未完成我之前需要做的其他事情写假。
【问题讨论】:
-
这将有助于了解您为什么需要 2 个单独的交易。是什么阻止您将更多操作放入单个事务中?
标签: ruby-on-rails database heroku atomic