dblink を使用してデータベース間のデータの一貫性を確保する

シェアする

ビッグ データを扱う際の課題の XNUMX つは、データ ソース間でデータの一貫性を確保することです。 ビッグ データを扱う場合、ほとんどのプラットフォームは複数のデータベースにわたって動作する可能性が高く、データ ソース間のレプリケーションを扱っている人ならご存知のとおり、レプリケーションにはいくつかの課題があります。 したがって、一貫性を検証することが非常に重要です。

我々で Intentwise Postgres から Redshift にデータを複製して、Redshift 上で複雑な分析クエリを実行するユースケースがあります。 このレプリケーションは XNUMX 日に複数回行われるため、データベース間の整合性を維持することが非常に重要です。

データの一貫性をどのように検証するのでしょうか?

データの一貫性を検証するにはさまざまな方法があります。私たちは Postgres と Redshift の間で dblink を使用してデータの一貫性を確保します。

Postgres dblink Redshift

Postgres での dblink のセットアップ

Postgres に接続し、次の SQL コードを実行します。 独自のインスタンスの値を使用します。

拡張機能 postgres_fdw を作成します。 拡張機能 dblink を作成します。 CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '', port '', dbname '', sslmode 'require'); サーバーのユーザーマッピングを作成しますforeign_server OPTIONS (ユーザー '', パスワード '');

参照することもできます データベースリンク PostgresSQL ドキュメントに記載されています。

dblink が設定されると、Postgres から Redshift テーブルにクエリを実行できるようになります。

データベース間でデータを検証する

以下の XNUMX つのテーブルの例を考えてみましょう。

Postgres キャンペーン テーブル

キャンペーンID予算status
おもちゃ12345678500使用可能
6人用のおもちゃ67779701300一時停止
8人用のおもちゃ12312355100アーカイブ

赤方偏移キャンペーンのテーブル

キャンペーンID予算status
おもちゃ12345678500使用可能
6人用のおもちゃ67779701300一時停止

上の XNUMX つのキャンペーン テーブルを比較すると、キャンペーン行「8人用のおもちゃ” が Redshift にありません。

dblink でこれを確認するにはどうすればよいでしょうか?

Java でプログラムを作成し、AWS サーバーレス Lambda 関数としてデプロイしました。 サーバーレス ラムダは、このようなスタンドアロン プログラムをデプロイするための優れた方法です。 Lambda は、CloudWatch などのスケジューラを使用して呼び出すことも、イベントを投稿することによっても呼び出すことができます。 「N」個の Lambda を並列実行できます。

不一致を確認するためのクエリ

XNUMX つのテーブル間のデータを検証するには、さまざまな方法があります。 方法の XNUMX つは、使用することです 以下は除く 以下に示す演算子:

select
   、キャンペーン ID、予算、
   status 
から
   キャンペーン_ポストグレ 以下は除くselect
      、キャンペーン ID、予算、
      status 
   から
      dblink('外部サーバー'、$赤方偏移$ 
      select
         、キャンペーン ID、予算、 status 
      から
         キャンペーン_レッドシフト $ レッドシフト $ ) as T( VARCHAR、キャンペーン ID BIGINT、 予算 10進数、状態 VARCHAR)

上記のクエリでは

  • dblink 関数は、前の手順で作成されたサーバー接続 ('foreign_server') を受け入れます。
  • SQL クエリは、二重ドル引用符 ($REDSHIFT$) で囲まれた文字列として渡されます。 クエリのこの部分は Redshift で実行され、データは Postgres に返されます。
  • Redshift で dblink を使用する場合、上記のクエリの T の後に定義されている結果セットのデータ型を定義する必要があります。

上記のクエリは次の結果を返します。

キャンペーンID予算status
8人用のおもちゃ12312355100アーカイブ

これは、「Toys for 8」が Postgres には存在するが、Redshift には存在しないことを示しています。 比較されている値の XNUMX つでも異なる場合は、上記のクエリを使用してそれを明らかにすることができます。

まとめ

Dblink は、異なるデータベース間の一貫性を検証する良い方法です。 Intentwise の周囲のすべてはデータを中心に実行されており、お客様は分析を行ったり重要な意思決定を行うためにデータに依存しているため、Intentwise ではデータの不一致を真剣に受け止めており、これはデータの一貫性を確保するために当社が行っている多くの取り組みの XNUMX つです。

参考文献

AWS ブログ dblink の使用について

DMS リファレンスを使用したデータベース移行に関する Intentwise の投稿

私たちの投稿を読んでください」データベース接続ツールデータベースに接続するための最適なツールのリストについては、「」を参照してください。

提言

ニュースレターを購読する

eコマース専門家向けの製品アップデート、ウェビナー、ニュースについて学びましょう。