2011-03-23 11 views
1

現在、SQL Serverにある1 TBのリレーショナルデータベースが与えられています。データウェアハウスには、データベースの主要部分の「コピー」が必要です。倉庫データは24時間を超えてはなりません。リレーショナルデータベースのサイズによって、毎晩フルロードするのは実用的ではありません。倉庫への増分ロードをサポートするために、リレーショナルデータベースをどのように設計する必要がありますか?データウェアハウスへの増分 "エクスポート"のためのデータベース設計

データベースの1分で非常に小さい部分(< 0.1%)が変更され、ほとんどが挿入されます。日中の変更は必要なく、最後のスナップショットだけです。

リレーショナルデータベースのパフォーマンスを維持することが最も重要であり、その後に不必要なスペースを浪費しません。

答えて

2

インクリメンタルプルを処理するにはいくつかの方法があります。さまざまな方法やシナリオで書かれたボリュームがありますので、私があなたに与えることができるアプローチの例です。

  • 挿入するには、単調増加キーを使用して、各プルの最高水準点を追跡します。データをプルする前に、ターゲット表で最大値を確認してから、値が大きい値をソースから引き出します。

  • 更新については、「最後に変更された」タイムスタンプの増分を基にしてください。各バッチの終わりに、最新のタイムスタンプを書き留めておき、次のバッチのためにそれを取り出せる場所に保管します。

  • 削除は段階的に難しくなります。私はあなたが削除された行のキー値を追跡することができる削除可能なテーブルごとに単純な監査テーブルを保持することをお勧めします。各バッチについて、前のバッチの最高水準点に基づいてプルし、ターゲットシステムで該当するアクションを実行します。セーフハーバーアクションのように、ターゲットシステムから行を物理的に削除することを選択することがあります。ターゲットレコードを単に非アクティブとしてマークすることもできます。設定したルールによって異なります。

もちろんこれを行う方法ではありません。しかし、うまくいけばそれはあなたにいくつかの適用可能なコンテキストを提供します。

+0

ソーステーブルに2つのフィールドを追加するだけでは、日時とレコードを削除する必要があるフラグがわかりません。次に、最後のETL操作の新しいレコードをすべてロードしています。新しいレコードが挿入され、変更されました。変更されました。また、フラグ 'deleted'を持つレコードは、ソーステーブルでも削除されます。 – John

+0

@John。私があなたの考えを理解していれば、ETLプロセスが削除されたレコードを受け取るための十分なウィンドウを与えた有効期限付きの論理削除フラグを設定します。これは良いアプローチです。私は、ETLプロセスがソースレコードの削除を担当することを推奨しているかどうかを判断しようとしています。もしそうなら、私は、外来キーが削除を失敗させる可能性があるケースでは、少し固執すると思います。代わりに、ソースシステムのRI構造を認識している刈り取りプロセスを選択します。 –

2

日中の変更をキャプチャする必要がありますか、毎日の終わりに現在の状態のスナップショットを要求するだけですか?

スナップショットが受け入れ可能な場合は、変更が識別できるように、更新時に各行にタイムスタンプを付けることができます。日中のすべての変更が必要な場合は、何らかの種類の変更データキャプチャ(CDC)ソリューションを調べます。一部のDBMSにはCDC /ロギング機能が組み込まれており、サードパーティのツールでも同様の機能を果たしています。通常、ソース・システムでのリソース競合を最小限に抑えるために、表に直接アクセスせずにREDOログをスクラブします。

+0

私は同意する、それは良い選択です。 Sql Sever 2008 Enterprise以上については、http://www.mssqltips.com/tip.asp?tip=1474を参照してください。 –

2

これは、「抽出、変換、ロード」またはETLと一般に呼ばれているトリッキーな領域です。正解はなく、私が見つけた本はどれも説得力のあるものではありませんでした.Ralph Kimballが最も有用なものを書いているようです。

まず、タイムスタンプの列をリレーショナルシステムに追加することをお勧めします。最後に成功した実行よりも若いデータを抽出する夜間クエリを作成することができます。転送ステータスを格納するために追加のテーブルを作成することができます。そのため、ソーステーブルのレコードは、転送テーブルに対応するレコードを持つ必要があります。そのレコードが存在しない場合、レコードが転送されていないことを意味します。

トランザクションデータモデルが頻繁に正規化されている場合は、依存関係の管理が難しい場合があります。まず、すべての外部キー値を移行する必要があります。

パフォーマンスが低下する場合は、トランザクション・データベースのミラーを使用してETLタスクを実行する必要があります。これはまったく新しい複雑さです。

私はKimballの書籍を最初に読んで、アイデアが直接適用可能かどうかを確認します。

関連する問題