バックグラウンド:
OLTP用に大幅に最適化されたPostgreSQL(v8.3)データベースがあります。
半リアルタイムでデータを抽出する必要があります(誰かが半リアルタイムの意味を尋ねる必要があり、答えは合理的に可能な限り頻繁に行われますが、ベンチマークが言うように、私は実用的です15分ごとに期待しています)そしてそれをデータウェアハウスに送ります。
どのくらいのデータ?ピーク時には、OLTP側に到達する1分あたり約80〜100k行を話しますが、オフピーク時には、これは15〜20kに大幅に低下します。最も頻繁に更新される行はそれぞれ最大64バイトですが、さまざまなテーブルなどがあるため、データは非常に多様で、1行あたり最大4000バイトの範囲になります。OLTPは24時間365日アクティブです。
最善の解決策?
私がまとめることができるものから、最も実用的な解決策は次のとおりです。
- TRIGGERを作成して、すべてのDMLアクティビティを回転するCSVログファイルに書き込みます
- 必要な変換を実行します
- ネイティブのDWデータポンプツールを使用して、変換されたCSVをDWに効率的に送ります
なぜこのアプローチ?
- トリガーを使用すると、システム全体ではなく、選択したテーブルをターゲットにすることができます。+出力は構成可能(つまり、CSVに)であり、作成と展開が比較的簡単です。SLONYは同様のアプローチを使用しており、オーバーヘッドは許容範囲内です
- CSVを簡単かつ迅速に変換
- CSVをDWに簡単に送り込む
検討された代替案...。
- ネイティブロギングの使用(http://www.postgresql.org/docs/8.3/static/runtime-config-logging.html)。これに関する問題は、私が必要としていたものに比べて非常に冗長に見え、解析と変換が少し難しいことです。ただし、TRIGGERに比べてオーバーヘッドが少ないと思われるため、より高速になる可能性があります。確かに、システム全体であるため、管理が容易になりますが、ここでも、一部のテーブルは必要ありません(一部は、ログに記録したくないJMSメッセージの永続ストレージに使用されます)
- TalendなどのETLツールを介してデータを直接クエリし、それをDWに送り込む...問題は、これをサポートするためにOLTPスキーマを微調整する必要があり、多くの悪影響があります。
- 微調整/ハッキングされたSLONYの使用-SLONYは、変更のログ記録とスレーブへの移行を適切に行うため、概念フレームワークは存在しますが、提案されたソリューションはより簡単でクリーンに見えます
- WALの使用
誰かがこれを以前にやったことがありますか?あなたの考えを共有したいですか?