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