2016-04-12 6 views
0

オンデマンドで読み取り専用サーバへの複製を容易にするpostgresqlツールがあるかどうかは疑問でした。ここで問題の説明は次のとおりオンデマンドでリフレッシュする読み取り専用クエリのPostgresql冗長性

  • すべてのデータ変更処理として複数のトランザクションを実行している(プロセスが複雑である - 例えば、負荷データ、実行する計算、等、より多くのデータを実行します)。プロセスが終了するまで、データベースはと一致しません。報告してください。

  • レポートは一貫したデータを使用する必要がありますが、完了するために、プロセスを変更するデータを待つべきではない - 彼らは古い(一貫)のデータを使用する必要があります。

理想的には、報告書では、データベースの一貫性のあるスナップショット上で実行する必要があります。 この問題を解決するためのアイデアは、次のとおりです。

  • 2つのサーバー - マスターとスレーブがあります。当初は全く同じデータを持っていました。
  • すべてのデータ変更のプロセスは、すべてのレポートタスクは、データ変更処理が完了すると、スレーブのリフレッシュがトリガーされたスレーブ
  • 上で実行されますマスター
  • 上で実行されます。例えば、コマンドの実行、ファイルシステム上のファイルの作成などがトリガーとなります。部分的にリフレッシュされたスレーブの読み取りは許可されません。
    • 、これはあまりにも長い間を取ることができない - フェイルオーバーするためにスレーブが使用されることはありませんマスター

上の変化の大きさに比例する必要があり、これは目的ではありません。

この問題の解決策はありますか?それとも別の方法で解決できるのでしょうか?

+1

なぜあなたはあなたの「データ変更処理」ビジネス要件を反映した単一のトランザクションを実行するために作りませんか?それはトランザクションのためのものです:データが一貫するまで何も表示されないようにしてください –

+0

私が考えることができる1つのソリューション:各ソーステーブルのFDWテーブルの作成、FDWテーブルに基づくマテリアライズドビューの作成、一貫した状態になっています。 –

+0

1つのトランザクションですべてを実行することは、実際にはオプションではありません。このプロセスには、複数のスレッド、プロセス、バイナリが含まれます。マット。私が知る限り、postgresqlはそれをサポートしていません(?)。ビューは、潜在的にオプションになる可能性があります。あまりにも時間がかかります。 –

答えて

0

これにはいい解決策があるようです。 Postgres> = 9.2は、現在のトランザクションのスナップショットIDをエクスポートする可能性があります。同じスナップショットIDを使用するすべてのトランザクションは、最初は同じデータを参照します。

私の場合、「ダミー」トランザクションを作成し、そのスナップショットをエクスポートできます。ダミートランザクションは何もしません。プロセスが開始されて終了したら終了します。すべてのレポートは、このスナップショットIDを使用して、ダミートランザクションが作成されたときに表示されたデータをレポートします。

ここでスナップショットの詳細を:https://www.willglynn.com/2013/10/25/postgresql-snapshot-export/

関連する問題