TouchDB-iOS を使用して、cloudant CouchDB サーバーにレプリケートするローカル CouchDB ドキュメント ストアを持つ iOS アプリを作成します。このアプリを実行しているユーザーが数人いるため、TouchDB データベースのレプリカが多数存在します。
アプリを使い始めたとき、私たちは CouchDB を初めて使用しました (今でもそうです)。タイプ A のドキュメントが次のようなプロパティを持つように関係を設計しました。これは、タイプ B のドキュメントである ID のコンマ区切りリストを記述する文字列です。
したがって、Employee/Employer の例を使用すると、"1,7,8,10" という名前Employer
のプロパティがあったことになります。employeeIds
従業員 10 が退職すると、このリストは「1,7,8」に更新されます。
問題は、アプリの別のインスタンス、たとえば別の電話で従業員 7 がリストを終了すると、リストが「1,8,10」に更新され、複製時に競合が発生することでした。
employerId
そのため、Employee
ドキュメント プロパティに を含めることをお勧めします。従業員が退職した場合、その従業員employerId
を空に設定するだけです。そのような紛争はずっと少なくなりますよね?
私が今直面している問題は、複数のアプリが存在することです。すべての CouchDB データベースを最初の設計から 2 番目の設計に移行するにはどうすればよいですか。
すべての古いアプリを廃止する必要がありますか?それとも、既存のアプリを破壊せずに競合を最小限に抑えながら、すべてのアプリを新しいデザインに移行するフェイルセーフな方法はありますか? このケースをどのように処理するのが最善ですか?