2016-03-24 24 views
-1

最近、私は初心者か些細なことが私に逃げたのか疑問に思うケースが出ました。同じデータの同時編集

テーブルを使用する多くのユーザーが実行するソフトウェアがあるとします。ユーザーがアプリでログインすると、テーブルの一連の情報が表示され、情報を追加、作業、または修正して保存するだけです。今では、彼が使用するソフトウェアが多くの人によって運営されている場合、その特定のレコードを扱っている唯一の人物であることをどのように保証できますか?私はレコードが選択されておらず、2人以上のユーザーが同時に作業していることをどのように知ることができますか?そして、私が答えを使用するのが好きではないと思います。 "SELECT FOR UPDATE ..." 私が読んだことは、データベースにあまりにもマイナスの影響を与えているからです。あなた方全員に感謝します。良い仕事を続けてください。

+0

ほとんどのデータベースは、そのままの状態でのアトミックなトランザクションをサポートしています。つまり、データベースは、一度に特定のスレッドに対して一連のクエリが実行されることを保証します。 –

+0

通常、データベースに問題が発生してユーザーに送信されることはありません。つまり、データを読み書きする別のトランザクションがあるので、データベースによって解決されるべきではありません。 –

+0

それは全く悪い質問ではありません。実際には、一般的な解決策を持たない必須のものの1つです。 –

答えて

-1

OracleはSQLサーバーと異なります。

オラクルでは、レコードまたはデータセットを更新するときに、更新がまだコミットされるまでデータベースバッファキャッシュ上に保持されているため、古い情報が引き続き使用できます。 したがって、誰が同じレコードを読んでいるのかは、古い結果を見ることができるでしょう。 このレコードへのアクセスが書き込みアクセスである場合、コミットするまではロックになり、同じレコードを書き込むためのアクセス権が与えられます。 ロックを解決できないときはいつでも、デッドロックがポップアップします。あなたは、クエリを分離する必要が

SQLサーバーしかし、あなたが実行している照会これによって、あなたがテーブル全体をロックする可能性があるので、変更内容を書くためにロックされたレコードを読み取る能力を持っていない

ファーストデータウェアハウス・データベースを使用して挿入/更新します。これは、ロックの原因となる更新のパフォーマンス低下を解決できることを意味します。 次のステップでは、何がロックを引き起こしているのかを特定し、それぞれのケースを個別に処理します。

作業時間中にインデックスを再構築すると、非常に不快なロックが発生する可能性があります。時間の経過後にそれらを押してください。

+0

スナップショット分離を有効にしてSQL Serverとどのように違うのですか? – TomTom

0

ここで彼が使用するソフトウェアが多くの人によって運営されているとすれば、その特定のレコードを扱っているのは です。

ああ...

そして、私が読んだ のためにそれがデータベースにあまりにもマイナスの影響を与えているので、私は、「UPDATE FOR SELECT ...」回答使用を好きではないだろうしてください。

誰が気にしますか?つまり、あなたがそれを変更できる唯一の人であることを保証するための唯一の方法です(行をロックする)。はい、これはスループットを制限しますが、これはあなたが望むものです。

プログラミングと呼ばれ、ジョブに適したツールを選択します。この場合、要件のために影響が必要です。

データベース(アプリケーションサーバ)の保証ではなく、メモリ内またはデータベースロックメカニズム(どのオブジェクトがどのユーザに属しているかを示すテーブルなど)です。

しかし、あるレコードがdbレベルで1人だけ使用されることを保証する必要がある場合は、ロックを維持して影響を処理しなければなりません。

しかし、真剣に、ほとんどのプログラムはこれを避けています。彼らは、楽観的なロック(2番目のユーザーが変更を送信するとエラーが発生する)または他のプログラマーレベルの決定のいずれかでそれを処理します。そのような保証のコストは非常に高いからです。

1

これは主にデータベースによって解決されないものです。データベースは、「並行トランザクション」の分離とロックを管理します。しかし、レコードがクライアントに送信されると、トランザクションが閉じられ、新しいトランザクションが開始されます(通常はうまくいけば)。

あなた自身に気を付ける必要があります。

異なるアプローチがありますが、私の心に入って来るものは以下のとおりです。

  • 楽観的ロック戦略(最初の勝利)
  • ペシミスティック・ロック・ストラテジー
  • 最後の勝利

オプティミスティック・ロック:その間にレコードが変更されたかどうかをチェックします。通常、これはバージョンカウンタまたはタイムスタンプを持つことで行います。一部のORMとフレームワークは、これを実装するのに少し役立ちます。

ペシミスティックロック:誰かが何かを編集し始めたという情報を格納し、他の誰かが同じものを編集することを許可しないメカニズムを構築します。特にWebプロジェクトでは、ロックが解放されるとタイムアウトが必要です。

最終受賞:レコードを保存している第2者が最初の変更を上書きします。 ...私は初心者だ場合、私は思ってしまう


...我々は非常に一般的なものはまだツールとフレームワークによって解決されていないことを発見したときに常に何が起こるかだ

我々はそれを何度も何度もやり直さなければならない。

関連する問題