-1

レプリケーション操作モードの使用が、次の設計上の問題に取り組む方法であるかどうかを調査しています。私は MySQL データベースのレプリケーションの経験がありません。このことを念頭に置いて読んでください。

データストレージ用の (中央) MySQL データベースを共有する、リモートコンピューター (具体的にはタブレット) の分散システムを開発する必要があります。このシステムは、mysql データベースを含むセントラル ユニット、簡単なクエリのためにデータベースに接続する端末、wifi ネットワークを介してデータベースに接続するポータブル デバイス (タブレット) で構成されています。

このシステムは、タブレットを使用して、外出先で製品を販売する地元の店の顧客、注文、販売、および在庫の管理に役立ちます。「トランザクション」ごとに、ローカル ネットワークから出る前にタブレットを mysql データベースと同期し、mysql テーブルから取得した必要なデータを挿入し、顧客、製品などを説明する必要があります。

私はこの必要なデータを含むタブレットで SQLite データベースを使用しており、外部のすべての活動はそれを悪用して新しい売上を挿入したり、顧客の状態を更新したりします。 mysqlで。

db インスタンス間でデータの一貫性を管理するにはどうすればよいですか? アドホック ソリューション (カスタマイズされた同期ソフトウェア ロジック) を使用する必要がありますか?それとも、組み込みのレプリケーション機能を使用して、このシナリオの一貫性の問題に効果的に取り組むことができるのでしょうか?

これらのトランザクションの後のデータの整合性が心配です。おそらく、タブレットが同期を返す前に他のデータが挿入または更新されたからです。定期的に同期されるこれらのリモート タブレットを使用して、あらゆる種類の操作でデータの整合性と一貫性を確保するにはどうすればよいでしょうか?

操作中、このリモート タブレットは必ずしも中央ノードに接続されているとは限りません (通常の場合)。そのため、レプリケーション/整合性操作は据え置きモードで操作する必要があります。つまり、タブレットがセントラル ノードに再度接続されたときです。

ありがとう

4

2 に答える 2

1

簡単なメモ-以下でとりとめのない場合は、申し訳ありません:)説明を求めてください。試してみます。

データを複製するだけの場合は、データベースシステムが提供する組み込み機能を使用できます。ただし、これらは通常、正確なコピーを作成することを目的としており、スマート機能(たとえば、在庫レベルの調整)は用意されていません。

これを実行してスマートを可能にする最も簡単な方法は、イベントを処理する方法を提供することです。イベントは、たとえば在庫アイテムに対して行われる注文など、必要と判断したものであれば何でもかまいません。通常、イベントタイプには、そのイベントの意味を指定するイベントタイプがあります。重要なのは、イベントにはタイムスタンプがあることです。これにより、デバイスを中央ハブにバックアップして同期するときに、関連するイベントを決定できます。また、同じことに対して両側でイベントが生成された場合の競合を解決するのにも役立ちます。

重要なのは、両端から発生する可能性のあるイベントとそのスコープを定義できる場合、これらの競合の識別と解決が容易になることです。また、単純なタイムスタンプで十分か、ある種の優先システム(つまり、メインサーバーでの変更が優先されるか)など、それらを解決するために必要な情報を決定するのにも役立ちます。また、解決が必要かどうか、またはイベントを一方向でしか処理できないかどうか。

デバイスを接続するときは、最後に接続してから発生したイベントを処理します。これにより、どのイベントがどこで処理されるか(メインシステムまたはモバイルデバイス)、およびそれらが生成する効果をカスタマイズできます。重要なのは、物事を単純にするために、モバイルデバイスで変更できるものに対してのみイベントを生成する必要があるということです。

あなたの例から、株式リスト、顧客、およびその他すべてのものを同期することは、モバイルデバイスへのデータの簡単な複製であり、情報を指定する必要がありますが、ある種の自動複製によって処理される可能性があります複製します(すべての正確なコピーは必要ないため)。

モバイルデバイスは、注文などを作成するときにオンサイトでイベントを生成します。これらのイベントは、注文が作成/キャンセルされたことなどをメインシステムに通知します。また、注文/キャンセルされた製品と数量を指定するためのテーブルを含めます。

同期すると、モバイルデバイスはそのイベントをアップロードし、メインマシンがそれらを処理して、自身のイベントとの競合を解決します。次に、クライアントは、すでに含まれているアイテムに影響を与える可能性のある関連イベントをダウンロードできます(または、システムの複雑さに応じて、デバイスに新しいデータを再入力するだけの場合もあります)。

オンサイトで顧客情報を変更するなど、他のこともありますが、これも主に単純なデータ同期ですが、メインシステムの顧客情報を変更するかどうかを決定したことを示すイベントを作成することもできます(他の誰かによって変更された可能性があるため...)


一例として、私が働いていた会社は、顧客サービス担当者がウィジェットを修理するためのモバイルシステムを開発しました。彼らはメインシステムと同じ状態でさえ生きていないかもしれません。午前中、カスタマーサービス担当者はラップトップの電源を入れ、メインシステムに同期し、その日の仕事の最新情報をイベントの形で受け取ります。これには、新しいジョブ、またはジョブがキャンセルされた、別の担当者にリダイレクトされた、スケジュールが変更されたなどのステータスの更新が含まれる場合があります。これらは、本社の誰か(通常)が電話に出て、ある種のインターフェースを介してシステムを更新することによって生成されます。そのインターフェイスが何であるかさえ知りませんでした。データベースに使用できる特定のイベントが生成されただけです。

新しいジョブを指定するイベントが生成されたとき、それがすべてでした。顧客やウィジェットの情報を含むジョブの詳細は、すべてデバイスに直接同期されていました。重要なのは、パーツリストとそのすべてがモバイルデバイスに一方向でのみ同期されたことです。

彼らが仕事に出くわしたとき、彼らはそれを開始済みとしてマークし、彼らのことを行い、何かが足りない場合は必要な部品を注文し、完了したとマークします。これはオフラインで発生し、モバイルデバイスでイベントを生成しました。

ある時点で、担当者は接続して別の同期を実行します。これにより、モバイルデバイスで作成されたイベントが処理され、競合が解決されてから、モバイルデバイスがメインシステムからの新しいイベントで自身を更新できるようになります。重要なことに、競合の解決は、発生したイベントに制限されていました。明らかに、担当者がウィジェットを修正した場合、予定のキャンセルは関係ありませんでした。また、パーツが必要な場合、これはデータの直接同期であり、メインシステムにそれらのパーツを注文するように指示するだけでしたが、関連するイベントがないと発生しませんでした。

于 2011-12-01T17:20:45.223 に答える
0

AD Hoc 同期ソリューション。特別な状況のすべてを考慮して、まさにあなたがやりたいことを正確に行います。なぜなら、それを手作業で作成し、すべてのエッジケースとユースケースを考慮に入れなければならないからです。デザイン。

「一般的な」ソリューションは、最も些細なケースを除いて機能しません。ソリューションは、データ要素間の関係を理解し​​、作成できる仮定と作成できない仮定、適用する必要がある特定のビジネス ルールなどを理解します。

大変な作業になることもあれば、かなり単純なこともあるでしょう。ドメインとデータ要件によって異なります。しかし、これは「一般的な」レプリケーション/同期の問題ではないことは間違いありません。非常に少数です。

では、コード チゼルを取り出して、ハンマーで叩き始めてください。いくつかの一般的な解決策を強制的に適合させるよりも、今すぐ弾丸をかじってやり遂げるのが最善です。それは時間の無駄です。

于 2011-02-18T00:13:07.047 に答える