【发布时间】:2013-10-31 01:45:51
【问题描述】:
使用 TouchDB-iOS,我们有一个 iOS 应用程序,它有一个本地 CouchDB 文档存储,可以复制到云 CouchDB 服务器。我们有几个用户在运行这个应用程序,从而产生了一堆 TouchDB 数据库副本。
当我们开始使用该应用程序时,我们是 CouchDB 的新手(我们仍然是)。我们设计了一种关系,以便类型 A 的文档具有一个属性,即:这是一个字符串,描述了一个以逗号分隔的 id 列表,这些 id 是类型 B 的文档。
因此,使用 Employee/Employer 示例,Employer 有一个名为 employeeIds 的属性,即“1,7,8,10”。如果员工 10 退出,此列表将更新为“1,7,8”。
问题是,当在应用程序的另一个实例上,假设在另一部手机上,员工 7 将退出列表时,列表会更新为“1,8,10”,从而导致复制时发生冲突。
因此,我们认为更好的办法是在 Employee 文档属性中添加一个 employerId。如果员工辞职,我们只需将他的employerId 设置为空。这样的冲突会少很多吧?
我现在面临的问题是有多个应用程序,如何将所有 CouchDB 数据库从第一个设计迁移到第二个设计。
我是否需要淘汰所有旧应用程序,或者是否有一种故障安全方法可以将所有应用程序迁移到新设计而不破坏现有应用程序并最大限度地减少冲突?我应该如何最好地处理这种情况?
【问题讨论】:
-
你控制客户吗?你能强制用户在给定的时间范围内升级吗?
-
是的,但我想把它作为最后的手段。