0

データベースにユーザー入力を挿入するRails3アプリがあります。

ユーザーが送信ボタンをクリックするたびに、すべてのフィールド(名前、電子メール、電話番号など)がデータベースに挿入されます。しかし、2人のユーザーが正確に同時にフォームを送信した場合、データベースはデッドロック状態になりますか?

Rails3にはスレッドモードがあります。これはで変更config.threadsafe!されproduction.rbます。しかし、これでデータベースのデッドロックの問題も解決できるかどうかはわかりません。

これを解決または回避する方法はありますか?

ありがとうございました!

4

1 に答える 1

1

データベースレベルでは、データベースがデッドロック状態になる危険はありません。MySQLのようなデータベースは非常に堅牢であり、1秒あたり数千回の更新でもデッドロックが発生することはありません。

ただし、Active Recordのオプティミスティックロックサポートを使用して、2番目のユーザーが編集を開始してからレコードが変更されたことを警告することは価値があるかもしれません。

上記のリンクされたドキュメントからの次の例は、これを説明するのに役立つはずです。

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は、スレッドセーフに関する記事を掲載しています。それは読む価値があります。

于 2013-02-11T22:43:18.270 に答える