Ruby on rails Rails 3,拍卖型引擎上的锁台
我正在Rails 3中构建一个类似拍卖的系统(使用PostgreSQL作为数据库) 想象你有一个产品。一个产品有很多出价 我担心当两个不同的用户同时点击“出价”时会发生什么(假设我至少有两个应用服务器,并且他们同时点击服务器)。我有两种可能可以接受的行为: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上处理这个问题?我认为使用常规事务是不够的,或者是不够
- 其中一个“获胜”,另一个收到错误消息
- 其中一个“获胜”,下一个创建另一个出价(每个出价增加0.01欧元)。因此,所有并发的出价都会重复,直到创建为止
这里有一个线程可以更好地解释这两种不同类型的锁定:谢谢!我已经阅读了你的链接,并同意悲观锁定是一条出路。我使用了Product.find(id,:lock=>true),它似乎在PostgreSQL上生成了正确的SQL。作为奖励,运行同一行的任何其他事务都会内联等待锁被移除,因此我可以轻松实现我问题中的选项2。太棒了,它对您有效。祝你申请好运!谢谢我已经阅读了你的链接,并同意悲观锁定是一条出路。我使用了Product.find(id,:lock=>true),它似乎在PostgreSQL上生成了正确的SQL。作为奖励,运行同一行的任何其他事务都会内联等待锁被移除,因此我可以轻松实现我问题中的选项2。太棒了,它对您有效。祝你申请好运!