Ruby on rails Rails 3,拍卖型引擎上的锁台

Ruby on rails Rails 3,拍卖型引擎上的锁台,ruby-on-rails,database,ruby-on-rails-3,activerecord,transactions,Ruby On Rails,Database,Ruby On Rails 3,Activerecord,Transactions,我正在Rails 3中构建一个类似拍卖的系统(使用PostgreSQL作为数据库) 想象你有一个产品。一个产品有很多出价 我担心当两个不同的用户同时点击“出价”时会发生什么(假设我至少有两个应用服务器,并且他们同时点击服务器)。我有两种可能可以接受的行为: 其中一个“获胜”,另一个收到错误消息 其中一个“获胜”,下一个创建另一个出价(每个出价增加0.01欧元)。因此,所有并发的出价都会重复,直到创建为止 所以我的问题是:如何在Rails3上处理这个问题?我认为使用常规事务是不够的,或者是不够

我正在Rails 3中构建一个类似拍卖的系统(使用PostgreSQL作为数据库)

想象你有一个产品。一个产品有很多出价

我担心当两个不同的用户同时点击“出价”时会发生什么(假设我至少有两个应用服务器,并且他们同时点击服务器)。我有两种可能可以接受的行为:

  • 其中一个“获胜”,另一个收到错误消息
  • 其中一个“获胜”,下一个创建另一个出价(每个出价增加0.01欧元)。因此,所有并发的出价都会重复,直到创建为止
所以我的问题是:如何在Rails3上处理这个问题?我认为使用常规事务是不够的,或者是不够的?

Rails应该允许您实现您想要的。据我所知,这将使您能够处理订购数据库更新的问题,而不会引发错误

这里有一个线程可以更好地解释两种不同类型的锁定:

Rails应该允许您实现您想要的。据我所知,这将使您能够处理订购数据库更新的问题,而不会引发错误


这里有一个线程可以更好地解释这两种不同类型的锁定:

谢谢!我已经阅读了你的链接,并同意悲观锁定是一条出路。我使用了Product.find(id,:lock=>true),它似乎在PostgreSQL上生成了正确的SQL。作为奖励,运行同一行的任何其他事务都会内联等待锁被移除,因此我可以轻松实现我问题中的选项2。太棒了,它对您有效。祝你申请好运!谢谢我已经阅读了你的链接,并同意悲观锁定是一条出路。我使用了Product.find(id,:lock=>true),它似乎在PostgreSQL上生成了正确的SQL。作为奖励,运行同一行的任何其他事务都会内联等待锁被移除,因此我可以轻松实现我问题中的选项2。太棒了,它对您有效。祝你申请好运!