2017-02-28 6 views
0

私はDBAではないと言ってこれを序文にしたいと思っています。技術的な知識の不足は残念です。複数のpostgresデータベースから1つのデータベースに読み取りレプリカを作成するにはどうすればよいですか?

私はマイクロサービスアーキテクチャで働いています。そこには、Postgresデータベースインスタンス(これが役立つ場合は、RDSにあります)によってサポートされているダースやアプリケーションがあります。各マイクロサービスのデータベースには、いくつかのテーブルが含まれています。どのスキーマ/テーブルにも名前の競合がないと仮定し、データベース全体にデータのシャーディングがないことは安全です。

私たちが抱えている問題の1つは、データベース全体でデータを分析/結合したいということです。現在、私たちはデータをキャッシュする第三者のツールに頼っており、(共有キャッシュを介して)複数のデータベースソースを照会することができます。

すべての本番データベースからスキーマ/テーブルの読み取り複製を作成し、単一のデータベースでクエリに使用できるようにすることはできますか?

PostgresまたはRDSを構成して、データベース間の結合を可能にする方法はありますか?

答えて

0

すべての本番データベースからスキーマ/テーブルの読み取りレプリカを作成し、1つのデータベースでクエリに使用できるようにすることはできますか?

はい、可能ですが、実際は非常に簡単です。

マスタとして機能する1台のPostgresサーバを設定します。

リモートサーバーごとにforeign serverを作成してから、foreign tableを作成して、マスターサーバーからデータにアクセスできるようにします。

複数のテーブルをマスタで1つのテーブルとして表示する必要がある場合は、継承を設定して、すべてのテーブルを同じように見せることができます。これらのサーバ間の別個の属性を識別する「シャーディング」キーを定義することができれば、Postgresは特定のサーバからのみデータを要求することさえできます。

すべての外部表は、ローカル表であるかのように結合できます。クエリの種類に応じて、フィルターや結合条件の一部(または多く)をリモートサーバーにプッシュダウンして配布することもできます。

Postgres Foreign Data Wrapperは書き込み可能であるため、マスターサーバーからリモートテーブルを更新することもできます。

リモートアクセスと結合が遅すぎる場合は、リモートテーブルに基づいてマテリアライズドビューを作成して、データのローカルコピーを作成できます。ただし、これはリアルタイムコピーではなく、テーブルの定期的な更新を管理する必要があります。

その他の(より複雑な)オプションは、BDRプロジェクトまたはpglogicalです。論理的な複製がnext Postgresバージョン(今年末にリリース予定)に組み込まれるようです。

Postgres-XLのような分散型の非共有システムを使用することもできます(これはおそらくセットアップとメンテナンスの最も複雑なシステムです)

関連する問題