マルチスレッドのクラスター化された Windows サービスがリッスンしている Oracle テーブルからジョブを取得しようとしています。
私が SQL を書いていた場合、クエリは次のようになります。
update job_queue
set status = :inProcess
where status = :waiting and rownum <= 1
returning job_id into :job_id;
そのため、たった 1 回のラウンド トリップで、更新ステートメントと同じくらい短いロック時間で、スレッドはそのジョブ アイテムを処理することができます。
問題は、各スレッドが可能な限り高速に実行できるように、NHibernate でこれをどのように実装できるかということです。