私たちの部門でコンテストをデバッグするための Windows アプリケーション (c# .net を使用) を作成しました。この多くのユーザーでは、同じデータベースを使用して質問のリストを選択し、それぞれの ID だけでマークを更新します。データベース内のマークを更新するときに、スレッドの概念を使用する必要がありますか?
4 に答える
いいえ、これは必要ありません。各ユーザーはデータベース接続プールから接続を取得し、それらは同時に動作し、並列プログラミングは必要ありません。
異なるスレッドからデータベースを更新しても、データベースは破損しません。これは、オブジェクトを保護するためにロックを適用する必要がある通常の C# とは異なります。データベースの更新がより高いレベルで互いに干渉しないようにするために、トランザクションを使用する必要がある場合があります。非常に簡単に言えば、複数のテーブルでデータベースを編集する場合、または顧客からの注文を追加するなど、データベースの変更がデータベースの内容に依存する場合、トランザクションはデータベースの一貫性を維持することを保証します。トランザクションは、削除された顧客の注文を追加することを防ぎます。 .
データベースとの対話には非 UI スレッドを使用する必要があります。そうしないと、UI が応答しなくなる可能性があります。たとえば、UI スレッドから長いクエリを実行した場合 (または接続が中断された場合、またはデータベースが頻繁に使用されている場合など、問題が発生する可能性があるものはすべて、問題が発生する可能性があります)、UI スレッドは完全な応答が受信されるまでブロックされます。
データベース内の同じデータを更新する可能性のある複数のユーザーがいる状況では、トランザクションを導入して、正しい制御とデータ フロー (ACID) を確保する必要がある場合があります。