ビッグ データを扱う際の課題の XNUMX つは、データ ソース間でデータの一貫性を確保することです。 ビッグ データを扱う場合、ほとんどのプラットフォームは複数のデータベースにわたって動作する可能性が高く、データ ソース間のレプリケーションを扱っている人ならご存知のとおり、レプリケーションにはいくつかの課題があります。 したがって、一貫性を検証することが非常に重要です。
我々で Intentwise Postgres から Redshift にデータを複製して、Redshift 上で複雑な分析クエリを実行するユースケースがあります。 このレプリケーションは XNUMX 日に複数回行われるため、データベース間の整合性を維持することが非常に重要です。
データの一貫性をどのように検証するのでしょうか?
データの一貫性を検証する方法は数多くありますが、当社ではPostgresとRedshift間のdblinkを使用してデータの一貫性を確保しています。

Postgres での dblink のセットアップ
Postgres に接続し、次の SQL コードを実行します。 独自のインスタンスの値を使用します。
CREATE EXTENSION postgres_fdw; CREATE EXTENSION dblink; CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '', port '', dbname '', sslmode 'require'); CREATE USER MAPPING FOR SERVER foreign_server OPTIONS (user '', password '');
参照することもできます データベースリンク PostgresSQL ドキュメントに記載されています。
dblink が設定されると、Postgres から Redshift テーブルにクエリを実行できるようになります。
データベース間でデータを検証する
以下の XNUMX つのテーブルの例を考えてみましょう。
Postgres キャンペーン テーブル
名前 キャンペーンID 予算 ステータス おもちゃ 12345678 500 有効 6人分のおもちゃ 67779701 300 一時停止 812312355100のおもちゃ(アーカイブ済み)
赤方偏移キャンペーンのテーブル
名前 キャンペーンID 予算 ステータス おもちゃ 12345678 500 有効 6人分のおもちゃ 67779701 300 一時停止
上の XNUMX つのキャンペーン テーブルを比較すると、キャンペーン行「8人用のおもちゃ” が Redshift にありません。
dblink でこれを確認するにはどうすればよいでしょうか?
Java でプログラムを作成し、AWS サーバーレス Lambda 関数としてデプロイしました。 サーバーレス ラムダは、このようなスタンドアロン プログラムをデプロイするための優れた方法です。 Lambda は、CloudWatch などのスケジューラを使用して呼び出すことも、イベントを投稿することによっても呼び出すことができます。 「N」個の Lambda を並列実行できます。
不一致を確認するためのクエリ
XNUMX つのテーブル間のデータを検証するには、さまざまな方法があります。 方法の XNUMX つは、使用することです 以下は除く 演算子は以下に示すとおりです。
select name, campaign_id, budget, status from campaign_postgres except all select name, campaign_id, budget, status from dblink('foreign_server', $ REDSHIFT $ select name, campaign_id, budget, status from campaign_redshift $ REDSHIFT $ ) as T(name VARCHAR, campaign_id BIGINT, budget decimal, state VARCHAR)
上記のクエリでは
- dblink 関数は、前の手順で作成されたサーバー接続 ('foreign_server') を受け入れます。
- SQL クエリは、二重ドル引用符 ($REDSHIFT$) で囲まれた文字列として渡されます。 クエリのこの部分は Redshift で実行され、データは Postgres に返されます。
- Redshift で dblink を使用する場合、上記のクエリの T の後に定義されている結果セットのデータ型を定義する必要があります。
上記のクエリは次の結果を返します。
名前 キャンペーンID 予算 ステータス 8歳向けおもちゃ 12312355 100 アーカイブ済み
これは、「Toys for 8」というデータがPostgresには存在するが、Redshiftには存在しないことを示しています。比較対象の値のうち1つでも異なっていれば、上記のクエリでそれを検出できます。
結論
Dblinkは、異なるデータベース間の整合性を検証する優れた方法です。Intentwiseのあらゆる業務はデータに基づいており、お客様は分析や重要な意思決定を行う際にデータに依存しています。そのため、Intentwiseではデータの不一致を深刻に受け止めており、Dblinkはデータの整合性を確保するために当社が行っている多くの取り組みの一つです。
参考情報
AWS ブログ dblink の使用について
IntentwiseによるDMSリファレンスを使用したデータベース移行に関する投稿
私たちの投稿をお読みくださいデータベース接続ツールデータベースに接続するための最適なツールの一覧については、こちらをご覧ください。












