Skip to content

Cloud との同期をもう少しいい感じにする #269

@pankona

Description

@pankona

現在

  • upload ... local の状態を cloud にそのまま反映する
  • download ... cloud の状態を local にマージする

という処理を行っている。これの問題点は、

  • 環境 A と環境 B で異なる変更を行った上で各々が upload を実施した場合、どちらかの変更が失われる
    • 先に download してから upload するという案もあるが、その場合手元で行った変更が失われる場合がある

なので、なるべく

  • 手元の変更を失わずに、
  • よそで発生した変更も失わないように local に反映する

というようにしたい。

以下の手順で同期する

  • local から cloud に upload する
    • cloud は upload されたデータとすでに保存されているデータをマージする (upload されてきたものの状態を優先する)
    • isDeleted フラグがついているものは削除する (物理削除)
  • upload 完了後、local は cloud からデータをダウンロードする
    • local のデータにマージする (download したものの状態を優先する)
    • isDeleted フラグがついているものは削除する (物理削除)

留意する点

  • 物理削除について
    • cloud だけにデータが残ってしまう可能性はないか?
      • local ではすでに消えたデータが、cloud 上ではまだ残っているという状態になる可能性がある
      • ただ、このケースは download 時に復活して見えるはずなので、ふたたび消すというオペレーションをすることでいつかデータの整合性が取れるはず
    • 物理削除する必要があるか?
      • 延々とデータが増え続けてしまうと同期にどんどん時間がかかるようになってしまうので、なるべく残しておきたくない
  • upload & download について
    • いつ実行する?
      • 理想的には、todo に変化が発生したタイミングで常に実行する
      • ネットワークが不通になる状況を考慮する必要があるので、ポーリングする必要もありそう
        • isDirty フラグを使うと、一応不要な通信は抑えられるかもしれない
  • 常に upload を先にやる必要がありそう
    • download を先にやると、手元の変更が失われる場合があるため
    • どっかの環境とコンフリクトするような場合はまあまあやむなし

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions