2013-02-04 16 views
8

2人以上のユーザーが両方ともオフラインで、同じデータを編集している場合は、誰が勝ちますか?または、より良いことに、競合/マージの解決はありますか?競合解消?

答えて

12

答えはデータの変更方法によって異なります。

  • set()(and remove、push、setWithPriorityなど)は最終書き込み優先です。したがって、クライアントAとクライアントBがともに「オフライン」で、後でFirebaseに接続した場合、クライアントAが最初にFirebaseに正常に接続すると、set()がFirebaseに書き込まれますが、クライアントBが接続されると、クライアントAの設定が上書きされるため、クライアントBは最終的に勝つでしょう。
  • transaction()には、競合の解決が組み込まれています。したがって、クライアントAがFirebaseに最初に接続された場合、トランザクションは最初の試行で成功します(競合がないため)。クライアントBが接続すると、最初の試行でトランザクションが失敗するため、トランザクション更新機能が2回目に自動的に実行され(クライアントAが以前に書き込んだ新しいデータに)、この新しいデータがFirebaseに書き込まれます(それ以上の競合はないと仮定します)。

誰が勝つか気にしない場合は、set()を使用してください。競合/マージの解決によって何らかの整合性を確保する必要がある場合は、transaction()を使用します。