同期するレコードにフラグを設定する方法が必要です。このようなシステムでは、同期する各テーブルに同期状態を保持する列があります。レコードが変更されると、その状態も(トリガーで)変更され、同期ツールは数分ごとに変更されたレコードを照会します。
この問題を正しく処理するには、特にレコードを直接削除できないため、多くのコードが必要になります。同期ツールは、最初に実際の削除を実行する必要があり、それを必要とします。それだけでなく、このように良いキューを作成するのは難しいので、レコードが親の前に同期されていればエラーになります。また、同期する必要があるすべてのテーブルには追加の列が必要です。
これで、実装しようとしている新しいソリューションがあります。このソリューションでは、キューに別のテーブルを使用します。キューには、他のテーブルのレコードへのポインタ(プライマリキー値とテーブル名/フィールド名への参照)が含まれています。このキューは変更を監視する唯一のテーブルであるため、変更されたレコードをキュー内で変更されたものとしてマークする単一のトリガを実装するだけです。これは別のテーブルの単一のキューであるため、前述の問題の解決方法が追加されています。
- すぐにレコードを削除できます。同期ツールはキュー内のIDを見つけ、それが存在しないことを確認して他のデータベースからも削除します
- 子の親の依存関係は自動的に解決されます。新しい親はその子の前にキューに入れられ、削除された親はその子の後ろに置かれます。クロスリンクされたレコードで見つかるかもしれない唯一の問題ですが、遅延コミットがその解決策になるかもしれません。
- すべてのテーブルに余分な列は必要ありません。単一のキュー、いくつかのヘルパー・テーブル、および単一のファンクション・コールを含む単一のトリガーで、同期する各表に対してのみコールされます。
残念ながら、私たちはこのソリューションを完全に実装していないため、実際にはうまく機能するかどうかはわかりません。
このシステムはレコードの1つに1つのコピーを作成します。私はそれも最高の承認だと思う。データをコピーしてから、ターゲットサーバーで(後で)処理します。私はそれをコピーしながらデータを処理することは良い考えではないと思います。何かがうまくいかない場合、データのデバッグと復元/再計算を行うことができます。
[MySQLレプリケーション](http://dev.mysql.com/doc/refman/5.5/en/replication.html)が必要ですか? – Nemoden
@Nemoden not quite。うまくいけば、ほとんどのデータは同様のフォーマットになりますが、これらのデータベースはさまざまな理由(時間と財務とインターネットのディレクトリ)で設計されているため、データの場所に関するかなりのルールを追加する必要があります。私はいくつかのデータベースレベルのものをやってみたいですが、SQL Serverベースのものは、フィールドが常に同じではないなど、部分的には簡単ではありません。試行された情報の変更を記録しながら、簡単にルールを作成したり、チェックを追加する(電子メールの送信など)。 – Sean