現在割り当てられているタスクは、2つのERP関連ソフトウェア間の双方向同期をプログラムする必要があることです。1つはWebサービス(Visual Studio Webリファレンス)を提供し、もう1つはREST APIを提供します。
APIのフィールドを一致させることができたので、同じデータを使用して、両方のAPIでオブジェクトの作成を開始できる可能性があります。ところが、実際の同期にたどり着き、思ったより難しいです。
私の頭の中では、すべてがうまくいきます。
Grabbing the data -> determine, what change it is on which side -> sync the data from the source system to the target system
しかし、実際のコーディングでは、いくつかの深刻な問題が発生しています。
信頼性とリソースに配慮した方法でこれを達成する方法についてアドバイスをいただけますか?
WebサービスAPIはREST APIよりもはるかに低速です。つまり、何も同期されない間隔があります(愚かに聞こえるかもしれませんが、この問題はシングルスレッドで解決できると思いました)。 。ここでマルチスレッド化が必要になる可能性はありますか?WebサービスAPIのレートは10000/hrに制限されています。
統合の世界へようこそ。それについて最も難しいことは、ほとんどのベンダーがあなたが何を必要としているのか、そしてその結果として彼らのインターフェースに生じたギャップをどれほど理解していないかです。
この場合、あなたは本当に扱いにくい問題を抱えているようです:
統合の設計では、APIのこの欠陥は修正されません。ベンダーにこの問題に対処してもらう必要があります(特に、最終更新時間を含める必要があります。提供しない理由はありません)、または要件を満たすために別のアプローチを考え出す必要があります。
あなたがやろうとしているのは、ある間隔で、2つのシステムを見て、一方の変更を他方に適用することだと思います。両方のシステムが変更された間隔で、他のシステムよりも優先したい場合。これは可能ですが、間隔がかなり長いと、非優先システムで行われた変更が失われる可能性があります。あなたが提供したものに基づいてこれを行う方法は、すべてのレコードを見て、それらが変更されたかどうかを判断するために保持しているある種のレコードと比較することです。たとえば、レコードIDのテーブルとレコードのハッシュを保持できます。ハッシュが変更されると、前回のチェック以降に変更があったことがわかります。次に、更新を適用できます。これは効率的ではなく、読み取りに問題がある可能性があります。
あなたが解決しようとしている問題は、本質的には 結果整合性 の問題です。たとえばビットコインには、それに対処するためのかなり興味深い方法があります。それがどのように達成されるかを読んだ場合、それを機能させるために必要なデータ要素が不足していることに気付くと思います。
両方のサイトのデータを比較できますが、特に、削除の問題が再び発生する可能性があります。
あるシステムとそれ自体を比較するためにスナップショットを維持し、後で各システムのみで変更されたものを見つけ、それらの変更をもう一方の側で解決しながら、それぞれのスナップショットを更新する必要があると思います。
その種類のスナップショットを使用すると、中間更新(たとえば、同じレコードが2回更新された)を見逃す可能性がありますが、おそらくそれは大丈夫だと思います。
ただし、スナップショットがアトミックに取得されるようにして、スナップショットが特定の時点で完全に正しいことを確認します。