web-dev-qa-db-ja.com

多対1レプリケーション/トランザクションレプリケーション

地理的に異なる場所(ローカルサイト)にいくつかのPostgreSQL DBがあります。

  • 各ローカルサイトDBのスキーマは同じですが、データは一意です。たとえば、Site_ID、Department_ID、Department_Nameという列を持つテーブルを考えます。 Site_IDはサイトごとに一意です。

  • ローカルサイトのDBからすべてのデータを収集して、データウェアハウスとして機能する集中管理されたDB(PostgreSQL)に収集したいと考えています。

  • 集中型DBの対応するサンプルテーブルには、上記と同じ列があります。すべてのローカルサイトデータはこのテーブルに入ります。もちろん、Site_IDで指定された各サイトデータ。

質問:これを達成する方法 PostgreSQLレプリケーションメソッド (ストリーミング/マルチマスターUDR/BDR /など)これは、SQLServerで Transactional Replication を使用して実行できると思います。 PostgreSQLでこの機能を実現する最良の方法は何ですか?

制限:ローカルサイトは発信ネットワーク接続のみを作成できます(つまり、ファイアウォールの制限により、インバウンド接続はありません)。

5
911

少なくとも2つのオプションが表示されます。

  • ほぼリアルタイムのレプリケーションは必要ないが、1日に1回(またはおそらく1時間に1回)で十分で、データ量が少ない場合は、各リモートで実行するスクリプトを簡単に作成できます。ロケーション:

    1. ローカルデータベースに接続する
    2. ローカルデータのダンプを行います(pg_dump --data-onlyで結構です)
    3. リモートデータベースに接続する
    4. その場所のすべてのデータを削除します
    5. ダンプからデータをプッシュします。
  • ほぼリアルタイムのレプリケーションが必要な場合、またはデータの量が多い場合(ただし、変更が比較的小さい場合)、Slonyを調べることができます。しばらく使用しておらず、必ずしも典型的な使用シナリオであるとは限りませんが、データセットが異なるため、機能するはずです。

    Slonyは、テーブルのトリガーを使用して変更をログに保存し、次にデーモンを使用して1つのサーバーから別のサーバーにログを転送し、変更を適用します。ただし、これが「中央からリモートに接続できない」シナリオで機能するかどうかを確認する価値があります。そうでない場合は、何らかの形のVPN(とにかくすべき)を検討する必要があります。

3
jcaron

SQLServerトランザクションレプリケーションを見ると、Skytools3のLondisteがこれに適しているようです。私が理解しているように、スカイプがLondisteで使用した1つは、PL /プロキシからデータをプッシュすることでしたOLTPセットアップをデータウェアハウスに設定しました。これは、複数のデータベースからデータをプッシュするように設定されました。同じテーブル構造を持つテーブルを、同じ共有テーブル構造を持つ中央データベースに配置します。

複数のパーティションから同じテーブルの「マージ」レプリケーションをセットアップする方法 を参照して、これをセットアップしてみてください。 。

そしてここにPGConプレゼンテーションからの詳細情報があります: Londiste Replication system for PostgreSQL

0
Kassandry