2017-08-21 8 views
1

現在、データベースリーダーからデータベースライターへのチャネルを開発中です。送信元と送信先の両方のコネクタがSQL Server上で実行されています。Mirthデータベースとデータベースを複製する

Interval in sourceを5ミリ秒に設定すると、データが以前にポーリングまたは書き込まれていても、チャネルが5ミリ秒ごとにポーリングしてデータを書き込むという問題があります。

たとえば、ソースデータベースに行が1つしかない場合、チャネルは5ミリ秒ごとに1つの行を宛先データベースに無期限に挿入し続けます。これにより、宛先データベースに無限の重複行が作成されます。

このような状況を回避し、ポーリングされたデータが新しい場合にのみ宛先に挿入する方法はありますか?

答えて

0

チャンネルを投稿していないため、クエリの表示がわかりません。また、dbスキーマを投稿しませんでした。一般的には、処理されたレコードを追跡する方法を実装する必要があります。関連するテーブルに新しいレコードが挿入されたときにデフォルト値 'NEW'を持つ列を追加することで、これを行う方法の1つです。それらを処理した後(たとえば、あるデータベースから別のデータベースにコピーした場合)、更新ステートメントを使用してステータスを「COPIED」に設定します。オプションで、レコードがいつコピーされたかを示すタイムスタンプを持つ列を持つこともできます。もう1つ(おそらく良い方法)は、データベース内のすべての突然変異を追跡する別のテーブルでこれを行うことです。これにより、記録するイベントの柔軟性が向上します。私は考えることができる

0

二つの方法:

  1. 通常の方法は、あなたが読んでいるDBのテーブルに設定されたフラグを持つことで、データが笑いでそのテーブルから読み込まれたら、あなたは更新されますテーブルは"Read"または"Processed"です。そのフラグに基づいて取得クエリを作成するので、フラグが"Read"/"Processed"と等しくない場合にのみデータが挿入されます

  2. DBを変更することができない場合は、フェッチするこのようなデータは"SELECT * FROM Table ORDER BY ID DESC LIMIT 1"です。あなたのプライマリIDです。

関連する問題