Couchdb 复制上的Cloudant自动增量字段
在执行复制时,是否可以自动递增文档的字段 我有一个应用程序,用户可以在地图上放置标记,我需要按顺序对这些标记进行编号,以便它们可以在报告中引用。用户使用移动客户端放置这些标记,因此在复制数据库时,在客户端分配数字将导致冲突Couchdb 复制上的Cloudant自动增量字段,couchdb,replication,auto-increment,cloudant,Couchdb,Replication,Auto Increment,Cloudant,在执行复制时,是否可以自动递增文档的字段 我有一个应用程序,用户可以在地图上放置标记,我需要按顺序对这些标记进行编号,以便它们可以在报告中引用。用户使用移动客户端放置这些标记,因此在复制数据库时,在客户端分配数字将导致冲突 是否可以在复制过程中分配序列号以防止冲突 复制时无法修改文档,只能将其从源移动到目标数据库。正如您所说的,如果源数据库和目标数据库包含相同的文档id,将生成一个冲突的文档,您的应用程序可以在需要时对其进行清理 Cloudant通过在创建文档时为文档提供一个长的、非顺序的id来
是否可以在复制过程中分配序列号以防止冲突 复制时无法修改文档,只能将其从
源
移动到目标
数据库。正如您所说的,如果源数据库和目标数据库包含相同的文档id,将生成一个冲突的文档,您的应用程序可以在需要时对其进行清理
Cloudant通过在创建文档时为文档提供一个长的、非顺序的id来避免新创建文档中的冲突。这避免了集群中的节点相互通信以建立唯一性或协调顺序编号
您可以生成自己的ID,但正如您所指出的,很难保证自动生成的ID在分布式系统中的唯一性
您可以基于以下组合生成和标识:
- 每个移动客户端的独特之处
- 局部序列号
e、 g.
{“\u id”:“userid456:1234567”}
我最终使用更新处理程序在每次调用处理程序时递增文档上的计数器
“更新”:{
“计数器”:“函数(doc,req){
如果(!单据计数器){
doc.counter=0;
}
单据计数器+=1;
返回[doc,JSON.stringify(doc.counter)];
}"
}
在复制之前,我检查是否已经为需要自动递增id的文档分配了一个值。如果不是,则调用更新处理程序并分配返回值。当所有文档都收到一个值时,我将继续复制