ビッグ データを扱う際の課題の XNUMX つは、データ ソース間でデータの一貫性を確保することです。 ビッグ データを扱う場合、ほとんどのプラットフォームは複数のデータベースにわたって動作する可能性が高く、データ ソース間のレプリケーションを扱っている人ならご存知のとおり、レプリケーションにはいくつかの課題があります。 したがって、一貫性を検証することが非常に重要です。
我々で Intentwise Postgres から Redshift にデータを複製して、Redshift 上で複雑な分析クエリを実行するユースケースがあります。 このレプリケーションは XNUMX 日に複数回行われるため、データベース間の整合性を維持することが非常に重要です。
データの一貫性をどのように検証するのでしょうか?
データの一貫性を検証するにはさまざまな方法があります。私たちは Postgres と Redshift の間で dblink を使用してデータの一貫性を確保します。
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 |
おもちゃ | 12345678 | 500 | 使用可能 |
6人用のおもちゃ | 67779701 | 300 | 一時停止 |
8人用のおもちゃ | 12312355 | 100 | アーカイブ |
赤方偏移キャンペーンのテーブル
名 | キャンペーンID | 予算 | status |
おもちゃ | 12345678 | 500 | 使用可能 |
6人用のおもちゃ | 67779701 | 300 | 一時停止 |
上の 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人用のおもちゃ | 12312355 | 100 | アーカイブ |
これは、「Toys for 8」が Postgres には存在するが、Redshift には存在しないことを示しています。 比較されている値の XNUMX つでも異なる場合は、上記のクエリを使用してそれを明らかにすることができます。
まとめ
Dblink は、異なるデータベース間の一貫性を検証する良い方法です。 Intentwise の周囲のすべてはデータを中心に実行されており、お客様は分析を行ったり重要な意思決定を行うためにデータに依存しているため、Intentwise ではデータの不一致を真剣に受け止めており、これはデータの一貫性を確保するために当社が行っている多くの取り組みの XNUMX つです。
参考情報
AWS ブログ dblink の使用について
DMS リファレンスを使用したデータベース移行に関する Intentwise の投稿
私たちの投稿を読んでください」データベース接続ツールデータベースに接続するための最適なツールのリストについては、「」を参照してください。