さて、私は、最も重要な問題の1つがデータベースの一貫性である割り当て[ミニプロジェクト]を取得しました。このプロジェクトは、複数のユーザーがプロジェクトにアクセスして操作できるようにするWebアプリケーションです。小さなテーブルセットへのクエリと更新の同時実行が期待できます。それらの一部は相互に接続されています(外部キーを使用)。
データベースの一貫性を可能な限り維持するために、分離レベルを使用することをお勧めします。それらについて少し(多分十分ではない?)読んだ後、私にとって最も有用なものはREADCOMMITTEDとSERIALIZABLEであると思いました。
クエリは次の3種類に分けることができます。
- クエリの取得
- クエリの更新
- コンボ
1つ目は、もちろんデータの一貫性が必要です。ダーティデータやコミットされていないデータなどを表示したくないので、これらのクエリにはREADCOMMITTEDを使用することを考えました。クエリの更新については、SERIALIZABLEを使用するのが最善の選択肢だと思いましたが、少し読んだ後、迷子になりました。コンボでは、おそらくDBから読み取り、更新が必要かどうかを判断する必要があります。これらの2〜3回の呼び出しは同じトランザクションで行われます。
これらの各クエリオプションで使用する分離レベルについてアドバイスを求めたかった。タイプごとに異なる分離レベルを検討する必要がありますか?またはただ1つに固執しますか?
MySQL5.1.53とMySQLJDBC3.1.14ドライバーを使用しています(要件... JDBCバージョンを選択しませんでした)
あなたの洞察は大歓迎です!
編集:
デフォルトレベルのように見えるREPEATABLEREADを使用することにしました。それが正しい方法かどうかはわかりませんが、共有モードでのロックとクエリの更新のための繰り返し読み取りは正常に機能するはずです...
皆さんはどう思いますか?