Iは、これらの要件を有する複数のリーダーが同時に処理された作業項目のキューを含むデータベーステーブルを持っている:この複数のリーダーソリューションを有効にするための適切な分離レベルとは何ですか?
- 各項目は一のリーダによって処理されるべきです。
- 何らかの理由で読み取りが失敗した場合は、別のリーダーが処理するために、そのアイテムをキューに戻す必要があります。ここ
各リーダが次の操作を行うことになる、可能な解決策の擬似コードである:
1)キューから次の項目を読んで、どこかにローカルに格納します。
2)
3トランザクションを開始する)がそれを見てから、他の読者を防止するために、アイテムを削除します。削除が失敗した場合は、既に別のワーカーがアイテムを引っ張っていることを意味します。
4)(手順1でローカルに保存された)アイテムを処理します。これは長時間走っている可能性があります。
5)トランザクションをコミット:項目の削除がコミットされる、次の項目を
OR
6)ROLLBACKトランザクション(明示的なロールバックまたはリーダー障害)を処理するためにステップ1に行く:項目の削除はバック戻る圧延しますバック他のリーダ
のためにキューに私の質問は:私はステップ3(アイテムの削除)した後、他の読者がそれを見ることができないようにする必要があり、最低の分離レベルは何ですか?最低限、整合性を維持しながら並行性を最大限にしたいということです。
注それが重要な場合、私は、SQL Server 2005を使用していますが(私は、これは正しい、製品不可知論者であるべきだと思う?)一般的に
このアプローチ上の任意の他のフィードバックは大歓迎です。
これはREAD COMMITTED(デフォルト) –
を使用していますが、この会話があったと思います。私はまだそれが欠陥ではないことを保持します。あなたはそれをテストしましたか?私が持っています。 – dkretz
@le dorfier:私は今のところ投票しましたが、いくつかのSQLエキスパートと話し合い、あなたに戻ってきます... –