Rails 3数据库并发插入

时间:2013-02-11 21:54:26

标签: ruby-on-rails database deadlock

我有一个Rails 3应用程序,可以将用户输入插入到数据库中。

每次用户点击提交按钮时,所有字段(姓名,电子邮件,电话号码等)都将插入到数据库中。但是,如果两个用户在同一时间提交表单,数据库是否会进入死锁状态呢?

我发现rails 3具有线程模式,这将更改config.threadsafe!中的production.rb。但我不确定这是否也会解决数据库死锁问题。

有没有办法解决或避免这种情况?

谢谢!

1 个答案:

答案 0 :(得分:1)

在数据库级别,数据库不会进入死锁状态。像MySQL这样的数据库非常强大,即使每秒1000次更新也不会导致死锁。

但是,使用Active Record的Optimistic locking支持可能值得警告第二个用户自开始编辑以来记录已更改。

以上链接文档中的以下示例应该有助于解释这一点:

p1 = Person.find(1)
p2 = Person.find(1)

p1.first_name = "Michael"
p1.save

p2.first_name = "should fail"
p2.save # Raises a ActiveRecord::StaleObjectError

旁边config.threadsafe!用于配置兼容的服务器,它们可以使用线程并发来处理服务器请求,而不是更常见的Rails进程并发。 Aaron Patterrson有writeup on threadsafe!值得一读。