1

私は次のシナリオを持っています:

  • ETLはデータをDWにロードします。
  • レポートはオンデマンドで実行され、おそらくETLと同時に実行され、DWからのデータを消費します。

そしてこれが私の問題です:レポートに部分的なデータが含まれていないことを確認する必要があります:

  • ETLがデータをロードする準備ができたときにレポートが実行されている場合、ETLはレポートが完了するまで待機する必要があります。
  • ETLがロード中であり、レポートが要求された場合、レポートはETLが終了するのを待つ必要があります。
  • ETLがロードを待機していてレポートが要求された場合、レポートはETLの実行と終了を待機する必要があります。ETLは常にレポートよりも優先されます。

これを取得するための最良のメカニズムは何ですか?データベースロックは、私が必要とする優先順位を管理するのに十分なほどインテリジェントではないようです。

独自のロックメカニズムを実装する必要がありますか?はいの場合、そのためのよく知られたデザインはありますか?多くのことを考慮に入れる必要があります。現在実行中のレポート(読み取り用のロック)を追跡する、ETLが終了の通知に失敗した場合のロックの有効期限を実装するなどです。

4

2 に答える 2

1

Cognosを使用している場合は、文書化されていないAPIをいじくり回したい場合を除いて、「ETLが実行されている場合にレポートが実行されないようにする」という種類の設定では基本的に運が悪いと思います。

最善の策は、特定のレポート(通常は集計に対して実行されるレポート)を特定し、事実と集計を最後に更新するようにETLプロセスを設定し、1つの大きな「更新」トランザクションとして確認することです。読み取りの一貫性を提供するdbmsを使用する場合、ロードされたデータの半分だけでレポートが表示されることなく、これを実行できるはずです。

複数のファクト/複数の集計にアクセスするレポートは、より厄介になります。alter table rename必要なものを構築してからテーブルをスワップアウトする、ある種の「テーブルスワップ」を設定しなければならない場合もあります。

于 2012-08-22T20:27:27.337 に答える
0

etlプロセスを開始時にテーブルのレコードにフラグを設定し、完了時に設定を解除することができますか?次に、レポートシステムはこのテーブルをクエリしてフラグが設定されているかどうかを確認し、ウェアハウスが実行中であることをユーザーに通知し、ETLプロセスの完了時に処理されるキューにレポートを配置するか、ユーザーに後で試すように指示します。処理されたファクトをユーザーが使用できるようにする場合は、フラグテーブルがテーブルグレインにある必要があります。つまり、テーブルごとのフラグレコードにあります。

于 2012-08-31T08:23:59.120 に答える