1

私の質問 :

2 つの mysql データベース (オフライン ローカル データベースとマスター オンライン データベース) を同期するにはどうすればよいですか?

問題は、データベースがリレーショナルであり、id が常に自動インクリメントであることです。そのため、insert を使用して同期するだけでは、参照が台無しになります。

これは私が作成したクリニック管理アプリの場合、問題は現在サーバー上にありますが、ユーザーのクリニックでインターネット接続がダウン/低速になることがあるため、彼をオフラインモードで作業させ (すべてのものをローカルデータベースに保存する)、手動で同期する必要があります (双方向) 一日の終わりにリモートデータベースで。したがって、基本的に各クリニックには独自のローカルデータベースがあり、それらすべてが中央データベースに同期する必要があります

テーブルの例。

デシベル中央ユーザー

|id|user|clinic  |
|01|demo|day care|
|02|nurs|er      |
|03|demX|day care|

デシベル。デイケア。ユーザー

|id|user|clinic  |
|01|demo|day care|
|02|demX|day care|

(ID は中央データベースとローカル データベースの間で必ずしも一致しないことに注意してください。ただし、両方のデータベースの構造は同じです)

例: 私のメインデータベースはこれよりも複雑ですが、例としてはそうすべきです

データベース情報:

  1. 各ユーザーは多くの訪問、プラグインを持っています。

  2. 各訪問には、患者 ID として 1 人のユーザー、医師 ID として 1 人のユーザーが含まれます

  3. 各プラグインには 1 人のユーザーと多くの入力があります

  4. plugin_inputs には 1 つのプラグインがあります

サーバー上に1つ、ローカルにホストされている2つのデータベースがあります-オフラインモード用-

私が望むのは、ローカル db をオンライン db と同期できるようにすることですが、複数のユーザー、複数のローカル db があるため、それぞれがほぼ同じ ID を持ち、オンライン db にはそれらすべてを組み合わせて含める必要があります。

どうすればそれらを一緒に同期できますか?

私はphp/mysql(オンライン)/ sqlite(ローカル)を使用しています

4

3 に答える 3

1

アプリケーション アーキテクチャを再設計して、「リモート」エンドに API を配置し、毎日の終わりに「ローカル」エンドで実行されるジョブを実行して、すべての「ローカル」データを「リモート」にポストしたくなるでしょう。 API。

このようにして、「ローカル」ジョブに次のような JSON メッセージを作成させることができます。

{ user_visit: 
    { 
      user_id: 1, 
      doctor_id: 1, 
      plugins: [
          {
          plugin_name: name,  
          data: {
              data_field1: "VALUE",
              data_field2: "VALUE2",
              data_fieldxx: "VALUExx"
          }

      ]
    }
}

そして、各メッセージを API に送信します。API では、JSON メッセージを反復処理して関係を再構築し、それに応じて「リモート」データベースに挿入します。

于 2015-02-10T22:10:42.710 に答える
1

できることがいくつかあります。

まず、ユーザー テーブルの複合主キーを検討できます。たとえば、主キーに「Clinic」を含めることができます。そうすれば、自動インクリメント値が重複していても、常にユーザーを一意に識別できることがわかります。

次に、「visit」テーブルの外部キーに、patient_clinic と doctor_clinic を含める必要があります。

別の方法として、さらに汚い方法で、各診療所の自動インクリメント フィールドを異なる番号から開始するALTER TABLE user AUTO_INCREMENT = 10000;ように設定することもできます。ユーザー テーブルの最初の auto_increment を 10000 に設定します。次の診療所が 20000 (または何でも) に設定した場合、オーバーラップを回避できます (そのマジック ナンバーを超えるまで、それが汚れている理由です)。

于 2013-02-11T16:29:55.053 に答える