簡単なメモ-以下でとりとめのない場合は、申し訳ありません:)説明を求めてください。試してみます。
データを複製するだけの場合は、データベースシステムが提供する組み込み機能を使用できます。ただし、これらは通常、正確なコピーを作成することを目的としており、スマート機能(たとえば、在庫レベルの調整)は用意されていません。
これを実行してスマートを可能にする最も簡単な方法は、イベントを処理する方法を提供することです。イベントは、たとえば在庫アイテムに対して行われる注文など、必要と判断したものであれば何でもかまいません。通常、イベントタイプには、そのイベントの意味を指定するイベントタイプがあります。重要なのは、イベントにはタイムスタンプがあることです。これにより、デバイスを中央ハブにバックアップして同期するときに、関連するイベントを決定できます。また、同じことに対して両側でイベントが生成された場合の競合を解決するのにも役立ちます。
重要なのは、両端から発生する可能性のあるイベントとそのスコープを定義できる場合、これらの競合の識別と解決が容易になることです。また、単純なタイムスタンプで十分か、ある種の優先システム(つまり、メインサーバーでの変更が優先されるか)など、それらを解決するために必要な情報を決定するのにも役立ちます。また、解決が必要かどうか、またはイベントを一方向でしか処理できないかどうか。
デバイスを接続するときは、最後に接続してから発生したイベントを処理します。これにより、どのイベントがどこで処理されるか(メインシステムまたはモバイルデバイス)、およびそれらが生成する効果をカスタマイズできます。重要なのは、物事を単純にするために、モバイルデバイスで変更できるものに対してのみイベントを生成する必要があるということです。
あなたの例から、株式リスト、顧客、およびその他すべてのものを同期することは、モバイルデバイスへのデータの簡単な複製であり、情報を指定する必要がありますが、ある種の自動複製によって処理される可能性があります複製します(すべての正確なコピーは必要ないため)。
モバイルデバイスは、注文などを作成するときにオンサイトでイベントを生成します。これらのイベントは、注文が作成/キャンセルされたことなどをメインシステムに通知します。また、注文/キャンセルされた製品と数量を指定するためのテーブルを含めます。
同期すると、モバイルデバイスはそのイベントをアップロードし、メインマシンがそれらを処理して、自身のイベントとの競合を解決します。次に、クライアントは、すでに含まれているアイテムに影響を与える可能性のある関連イベントをダウンロードできます(または、システムの複雑さに応じて、デバイスに新しいデータを再入力するだけの場合もあります)。
オンサイトで顧客情報を変更するなど、他のこともありますが、これも主に単純なデータ同期ですが、メインシステムの顧客情報を変更するかどうかを決定したことを示すイベントを作成することもできます(他の誰かによって変更された可能性があるため...)
一例として、私が働いていた会社は、顧客サービス担当者がウィジェットを修理するためのモバイルシステムを開発しました。彼らはメインシステムと同じ状態でさえ生きていないかもしれません。午前中、カスタマーサービス担当者はラップトップの電源を入れ、メインシステムに同期し、その日の仕事の最新情報をイベントの形で受け取ります。これには、新しいジョブ、またはジョブがキャンセルされた、別の担当者にリダイレクトされた、スケジュールが変更されたなどのステータスの更新が含まれる場合があります。これらは、本社の誰か(通常)が電話に出て、ある種のインターフェースを介してシステムを更新することによって生成されます。そのインターフェイスが何であるかさえ知りませんでした。データベースに使用できる特定のイベントが生成されただけです。
新しいジョブを指定するイベントが生成されたとき、それがすべてでした。顧客やウィジェットの情報を含むジョブの詳細は、すべてデバイスに直接同期されていました。重要なのは、パーツリストとそのすべてがモバイルデバイスに一方向でのみ同期されたことです。
彼らが仕事に出くわしたとき、彼らはそれを開始済みとしてマークし、彼らのことを行い、何かが足りない場合は必要な部品を注文し、完了したとマークします。これはオフラインで発生し、モバイルデバイスでイベントを生成しました。
ある時点で、担当者は接続して別の同期を実行します。これにより、モバイルデバイスで作成されたイベントが処理され、競合が解決されてから、モバイルデバイスがメインシステムからの新しいイベントで自身を更新できるようになります。重要なことに、競合の解決は、発生したイベントに制限されていました。明らかに、担当者がウィジェットを修正した場合、予定のキャンセルは関係ありませんでした。また、パーツが必要な場合、これはデータの直接同期であり、メインシステムにそれらのパーツを注文するように指示するだけでしたが、関連するイベントがないと発生しませんでした。