2016-11-04 7 views
0

これで、DBにアクセスできるすべてのレールアプリケーションに2つのプロセスがあるとします。今では、プロセスの1つで、テーブルをクエリして後でそれを再度クエリするためにstrightする必要があります。私の質問は、同じプロセスで作成された2つのクエリの間に他のプロセスによってテーブルに編集が行われていないことを確認する方法です。取引はここで助けになるのですか?私はそうは思わない。2つの異なるクエリ間でテーブルの変更を防ぐ方法

+0

'トランザクションは、単一のデータベース接続上で動作します。クラス固有のデータベースが複数ある場合、そのトランザクションはそれらの間の相互作用を保護しません。 1つの回避策は、モデルを変更した各クラスでトランザクションを開始することです: ' –

+0

別のセッションがこれらの2つのクエリ間でデータを修正しようとすると、どのような振る舞いが必要になりますか?エラーを投げますか?あるいは、データを変更して再クエリしてやり直すことができるかどうかを知りたいだけですか? –

答えて

0

あなたにはいくつかのオプションがあります。私はあなたのアプリケーションのアーキテクチャやあなたが使用しているデータベースについてよく分かりません。使用しているデータベース(mysql、pgsqlなど)に応じて、table lockingを実行できます。この作業がDBからDBにどのように異なるかの詳細。テーブルをロックする以外に、ある種のキューイングシステム(lick active job、またはdelayed job)を使用して、そのテーブルへのすべての書き込みをキューに入れ、現在の書き込みが完了したらそのテーブルへの書き込みのみを処理できます。これが本当のハイレベルの説明であり、あなたのような考慮に入れる必要があるいくつかの注意事項があります。

  • は、ユーザーまたはシステムが
  • は、これらの書き込みを遅らせるだろうこれらの書き込みがリアルタイムであることを期待していrace conditionを引き起こします
  • あなたは
  • キューイング・システムを統合するためのリソースを持っていますので、これらはあなたのreseaのためのいくつかの出発点で現在のデータベースの提供テーブルが

をロックしていrch私は、テーブルの編集を止めるつもりなら、テーブルがロックされた状態で白くなったすべての書き込みを確実に保存しなければならないと言います。

関連する問題