私はいくつかの入力を探しています。マルチユーザー、マルチベンダー、n 層データベース アプリケーションを設計しています。
このシステムの各ローカル インストールは、そのレコードを単一の中央サーバーに複製する必要があります。このサーバーは、インストールされたデータベース アプリのユーザーが直接利用することはできず、インターネットが唯一のルートです。中央データベースはレポートにのみ使用されるため、レプリケーションは中央サーバーへの一方向のみで済みます。
主な目的は、「疑似リアルタイム」スナップショットを確保するために、レコードをできるだけ早く中央データベースに取得することです。
ここに私がこれまでに持っているものがあります:
インターネット上のWebサーバー(SOAPサービス)を利用して圧縮・暗号化ファイル(XMLデータ)をアップロードします。「中央」データベース サーバーは Web サーバーをポーリングし、定期的にデータを収集してインポートします。
ローカル データベース システムはレコードを削除しませんが、削除済みとしてマークします。
データベース内の各テーブルには、中央データベースでのキー違反を防ぐために、GUID のような代理キー (つまり、auto-inc フィールドなし) を使用する主キーがあります。
クライアントの db サーバーを使用して抽出およびアップロード プロセスを実行することを割引しました。これは、顧客のサイトでこのシステムの IT サポートがほとんどないためです。アップロードが失敗した場合 (ローカル ファイアウォール/プロキシ サーバーの問題が原因で)、ユーザーが必要です。彼らがそれを整理できるように、できるだけ早く知るために。
抽出プロセスは、変更を抽出するためにローカル データベース全体にクエリを実行するため、一度に 1 つのクライアント アプリケーションで実行するだけで済みます。
私が苦労しているのは、最近変更されたレコードを効率的に (そして正確に) 抽出できるようにするためのデータベース構造です。また、これはユーザーが作業しているときにも発生します。つまり、ユーザーが抽出中にレコードを編集用に開いていることに注意する必要があり、ユーザーの作業をあまり中断しないように「バックグラウンドで」実行する必要があります。
つまり、日付と時刻に基づくアプローチを使用しますか? ある種のステータス フィールドを使用するか、クエリしてからクリアできる別の変更ログ テーブルを使用するか。
長い投稿で申し訳ありませんが、このソリューションの開発に関して誰かが経験したことを高く評価します。
ティア、
スチュアート