地理的に異なる場所(ローカルサイト)にいくつかのPostgreSQL DBがあります。
各ローカルサイトDBのスキーマは同じですが、データは一意です。たとえば、Site_ID、Department_ID、Department_Nameという列を持つテーブルを考えます。 Site_IDはサイトごとに一意です。
ローカルサイトのDBからすべてのデータを収集して、データウェアハウスとして機能する集中管理されたDB(PostgreSQL)に収集したいと考えています。
集中型DBの対応するサンプルテーブルには、上記と同じ列があります。すべてのローカルサイトデータはこのテーブルに入ります。もちろん、Site_IDで指定された各サイトデータ。
質問:これを達成する方法 PostgreSQLレプリケーションメソッド (ストリーミング/マルチマスターUDR/BDR /など)これは、SQLServerで Transactional Replication を使用して実行できると思います。 PostgreSQLでこの機能を実現する最良の方法は何ですか?
制限:ローカルサイトは発信ネットワーク接続のみを作成できます(つまり、ファイアウォールの制限により、インバウンド接続はありません)。
少なくとも2つのオプションが表示されます。
ほぼリアルタイムのレプリケーションは必要ないが、1日に1回(またはおそらく1時間に1回)で十分で、データ量が少ない場合は、各リモートで実行するスクリプトを簡単に作成できます。ロケーション:
pg_dump --data-only
で結構です)ほぼリアルタイムのレプリケーションが必要な場合、またはデータの量が多い場合(ただし、変更が比較的小さい場合)、Slonyを調べることができます。しばらく使用しておらず、必ずしも典型的な使用シナリオであるとは限りませんが、データセットが異なるため、機能するはずです。
Slonyは、テーブルのトリガーを使用して変更をログに保存し、次にデーモンを使用して1つのサーバーから別のサーバーにログを転送し、変更を適用します。ただし、これが「中央からリモートに接続できない」シナリオで機能するかどうかを確認する価値があります。そうでない場合は、何らかの形のVPN(とにかくすべき)を検討する必要があります。
SQLServerトランザクションレプリケーションを見ると、Skytools3のLondisteがこれに適しているようです。私が理解しているように、スカイプがLondisteで使用した1つは、PL /プロキシからデータをプッシュすることでしたOLTPセットアップをデータウェアハウスに設定しました。これは、複数のデータベースからデータをプッシュするように設定されました。同じテーブル構造を持つテーブルを、同じ共有テーブル構造を持つ中央データベースに配置します。
複数のパーティションから同じテーブルの「マージ」レプリケーションをセットアップする方法 を参照して、これをセットアップしてみてください。 。
そしてここにPGConプレゼンテーションからの詳細情報があります: Londiste Replication system for PostgreSQL