我有一个Rails 3应用程序,可以将用户输入插入到数据库中。
每次用户点击提交按钮时,所有字段(姓名,电子邮件,电话号码等)都将插入到数据库中。但是,如果两个用户在同一时间提交表单,数据库是否会进入死锁状态呢?
我发现rails 3具有线程模式,这将更改config.threadsafe!
中的production.rb
。但我不确定这是否也会解决数据库死锁问题。
有没有办法解决或避免这种情况?
谢谢!
答案 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!值得一读。