复制时的Cloudant自动增量字段

时间:2015-12-03 14:27:47

标签: couchdb replication auto-increment cloudant

执行复制时是否可以自动递增文档的字段?

我有一个应用程序,用户可以在地图上放置标记,我需要按顺序编号这些标记,以便在报告中引用它们。用户使用移动客户端放置这些标记,因此在复制数据库时分配数字客户端将导致冲突。

是否可以在复制过程中分配序列号以防止冲突?

2 个答案:

答案 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的文档分配了值。如果没有,我调用更新处理程序并分配返回的值。当所有文档都收到值后,我继续复制。