私はFMEを使用しませんでしたが、5時間の処理ジョブの出力を使用して、低帯域幅ネットワークリンクを介した並列データベースの3つの可能な処理ケースを特定する必要がある同様の処理タスクがありました。
- 追加する新機能
- 更新される既存の機能
- 削除する既存の機能
すべての機能がパス間で一意のID値を保持することが保証されていたため、次のことができました。
- 更新されたテーブルの重要な列全体で{uID、checksum}ペアのテーブルを生成した処理スクリプトを実行します
- 前のイテレーションで生成された{uID、checksum}ペアを使用して、uIDがチェックサムが一致しないサブクエリにある更新されたテーブルの行を含むターゲットテーブルに更新を送信しました
- 外部結合サブクエリが示した更新されたテーブルからの挿入を送信すると、一致しないuIDがありました。
- 現在のテーブルに一致するuIDがないことを外部結合サブクエリが示した外部テーブルの機能を削除するためにuIDのリストを送信しました
- 翌日の運用のために現在の{uID、checksum}ペアを保存します
外部データベースでは、新しい機能を挿入し、デルタを更新し、削除されたuIDの一時テーブルにデータを入力し、削除テーブル内の機能を削除するだけで済みました。
このプロセスを自動化して、1日の実行時間を20分未満にすることで、数百の毎日の変更を1000万行のテーブルに伝播し、本番テーブルへの影響を最小限に抑えることができました。同期を失うことなく、数年間最小限の管理コストで実行されました。
M行にわたってNの比較を行うことは確かに可能ですが、ダイジェスト/チェックサムを使用することは、はるかに低いコストで「既存の」テストを実行するための非常に魅力的な方法です。