2009-03-11 9 views
5

ステージング・テーブルは、rpc(Java RMIやその他のWebサービス・コールなど)またはメッセージング・キュー(JMSなど)を使用した方が良い解決策になるか、 ? ステージングテーブル/ステージングデータベースはアンチパターンですか?

は、明確にするために:

テーブルをステージングすることによって、私はレコードがそれまでに読み取られ、第二の工程またはプロセスによって作用されるプロセスによってテーブルやテーブルに付加されているような場合を意味します。私は、インターバルの終了(終了、支払期限の終了など)を反映するための表である表を参照していません。ほとんどの場合、ステージング表のスキーマは、顧客やアカウントなどのアプリケーション・データ型を厳密に模倣しています。

このアンチパターンの潜在的な原因:二つのプロセスの所有者との間に

1)ビジネスユニットウォールへの書き込みやステージングが修正されることから読み込むプロセスを防ぐことができます。

2)への書き込みやステージングは​​、データの損失を防ぐために、テーブルを使用する開発者をリードしてから読み込むプロセスにおける低信頼

3)知識やDGAS(与えていないの欠如^「の場合何かには失敗しました」 %$ @)の姿勢

答えて

11

説明したように、ステージングテーブルはほとんどのデータウェアハウスまたはBI環境に不可欠です。あなたは、信頼できる/弾力のあるrpcが同じ仕事をすると主張することができますが、私はあなたが間違っていると思います。

データをステージングテーブルにプルすることで、実稼働環境から移動して、さらに計算、要約、再インデックス、再キーイングなどを実行する可能性があります。データベース '。これをRPCに置き換えると、コードとCPUのサイクルをDBからアプリケーションサーバーに移動しているため、実際のメリットはありません。たとえば、アプリケーションサーバーはクラッシュする可能性が非常に高いため、RPCを(簡単に)ロールバックすることはできません。

もちろん、システム間でデータを確実に移動する方法は数多くありますが、ステージングテーブルは最も簡単でパフォーマンスが高く、信頼性が高く、開発の面で最も安価であり、必ずしも正しいアプローチではありません。しかし、しばしばそうではない。

0

これを見たのは、レポートが生成されている間に非正規化テーブルを使用してデータを保持する理由が報告された唯一のリアルタイムです。私はそれがその使用のための問題だとは思わない。

0

私の最初の反応は「はい」ですが、主に自分の状況のた​​めです。あなたの状況は異なる場合があります。我々は、比較的時間に敏感な情報をコマンドコンポーネントからレシーバコンポーネントに移す必要があるシステムを持っています。コマンド情報はデータベーステーブルに格納され、受信者は更新のためにテーブルをポーリングします。これは恐ろしいことです。彼らはデータベースにコマンドの記録があるようにしましたが、実際のコマンドを永遠に取ることに終わり、デカップリングによって受信者がデータベースと同期しなくなることがありました。

私はEMS(JMSのような)が受信者とデータベースのインサータの両方が聞くトピックにメッセージをブロードキャストすることを望んでいます。あるいは、受信者がステータスリスナーに通知するように通知しますデータベース内のその状態。

私はそのコードを修正するのを待つことができません。

6

なぜ彼らはアンチパターンですか?ステージングテーブルは、受信サービスを処理サービスから切り離すのに非常に便利です。このようなサービスが2つ分離されている場合、すべてのメッセージがステージングテーブルに格納されるため、処理エラーとネットワークエラーの回復力が大幅に向上します。

関連する問題