-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
現在
- 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 時に復活して見えるはずなので、ふたたび消すというオペレーションをすることでいつかデータの整合性が取れるはず
- 物理削除する必要があるか?
- 延々とデータが増え続けてしまうと同期にどんどん時間がかかるようになってしまうので、なるべく残しておきたくない
- cloud だけにデータが残ってしまう可能性はないか?
- upload & download について
- いつ実行する?
- 理想的には、todo に変化が発生したタイミングで常に実行する
- ネットワークが不通になる状況を考慮する必要があるので、ポーリングする必要もありそう
- isDirty フラグを使うと、一応不要な通信は抑えられるかもしれない
- いつ実行する?
- 常に upload を先にやる必要がありそう
- download を先にやると、手元の変更が失われる場合があるため
- どっかの環境とコンフリクトするような場合はまあまあやむなし
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels