在两个CouchDB设计之间迁移

在两个CouchDB设计之间迁移,couchdb,touchdb,Couchdb,Touchdb,使用TouchDB iOS,我们有一个iOS应用程序,它有一个本地CouchDB文档存储,可以复制到cloudant CouchDB服务器。我们有几个用户在运行这个应用程序,结果出现了一堆TouchDB数据库副本 当我们开始使用这个应用程序时,我们还是CouchDB的新手(现在仍然是)。我们设计了一个关系,这样类型a的文档就会有一个属性:这是一个字符串,描述了一个以逗号分隔的id列表,这些id是类型B的文档 因此,使用Employee/Employer示例,Employer有一个名为employ

使用TouchDB iOS,我们有一个iOS应用程序,它有一个本地CouchDB文档存储,可以复制到cloudant CouchDB服务器。我们有几个用户在运行这个应用程序,结果出现了一堆TouchDB数据库副本

当我们开始使用这个应用程序时,我们还是CouchDB的新手(现在仍然是)。我们设计了一个关系,这样类型a的文档就会有一个属性:这是一个字符串,描述了一个以逗号分隔的id列表,这些id是类型B的文档

因此,使用Employee/Employer示例,
Employer
有一个名为
employeeIds
的属性,即“1,7,8,10”。如果10号员工离职,该列表将更新为“1,7,8”

问题是,当在应用程序的另一个实例上,比如说在另一部手机上,员工7将退出该列表,并且该列表将更新为“1,8,10”,从而在复制时造成冲突

因此,我们认为更好的办法是在
Employee
文档属性中使用
employeerid
。如果员工离职,我们只需将其
employerId
设置为空即可。这样的冲突会少很多,对吗

我现在面临的问题是有多个应用程序,如何将所有CouchDB数据库从第一个设计迁移到第二个设计


我是否需要淘汰所有旧的应用程序,或者是否有一种故障安全的方法将所有应用程序迁移到新的设计中,而不破坏现有的应用程序,同时最大限度地减少冲突?我应该如何最好地处理这种情况?

基本上有两种情况:

如果你的应用程序只在数据库上进行查询(通过视图),你可以简单地更新视图,以处理“旧式”和“新式”文档。然后,您可以在后台更新文档(如通过遵循),并最终再次删除对旧式文档的支持

如果你的应用程序使用了应用程序的结构,那么很可能也无法更新应用程序。否则,您需要在新旧样式文档之间转换一些代理,例如

CouchDB with new-style docs  <-- proxy application --> apps with old-style docs
CouchDB与旧式文档
当然,你可以更新你的应用程序来处理新旧样式的文档,这样你就可以逐步转换文档


<>如果你必须重新设计对CouCHDB的访问,你可以考虑使未来的变化更加透明。< /P>你控制客户机吗?你能强迫用户在给定的时间范围内升级吗?是的,但我想把它作为最后的手段。