私は次のシナリオを持っています:
- ETLはデータをDWにロードします。
- レポートはオンデマンドで実行され、おそらくETLと同時に実行され、DWからのデータを消費します。
そしてこれが私の問題です:レポートに部分的なデータが含まれていないことを確認する必要があります:
- ETLがデータをロードする準備ができたときにレポートが実行されている場合、ETLはレポートが完了するまで待機する必要があります。
- ETLがロード中であり、レポートが要求された場合、レポートはETLが終了するのを待つ必要があります。
- ETLがロードを待機していてレポートが要求された場合、レポートはETLの実行と終了を待機する必要があります。ETLは常にレポートよりも優先されます。
これを取得するための最良のメカニズムは何ですか?データベースロックは、私が必要とする優先順位を管理するのに十分なほどインテリジェントではないようです。
独自のロックメカニズムを実装する必要がありますか?はいの場合、そのためのよく知られたデザインはありますか?多くのことを考慮に入れる必要があります。現在実行中のレポート(読み取り用のロック)を追跡する、ETLが終了の通知に失敗した場合のロックの有効期限を実装するなどです。