如何有条件地复制CouchDB?

4nkexdtk  于 2023-08-01  发布在  CouchDB
关注(0)|答案(1)|浏览(221)

以下场景:

我有两个CouchDB。

  • CouchDB_A* 有一个 database_A,它的 version_A = 1.0(不是couchdb版本!=>一些自由定义的版本,数据库_A中保存此信息的文档)
  • CouchDB_B* 有一个 database_B,它的 version_B = 2.0

database_A和database_B之间将有一个复制作业。

问题:

如何告诉我的_replicator或_replicator文档仅在满足条件(version_A == version_B)时才开始复制?
据我所知,CouchDB_A 需要在运行作业之前从 CouchDB_B 中检索这些信息,但我不知道如何在复制器文档中执行此类操作。
我试图实现的是这样的:

remote_version_B = getRemoteVersion()

if(local_version_A == remote_version_B) {
   start_replication_to_B
} else {
   don_t_replicate
}

字符串

pdkcd3nj

pdkcd3nj1#

我的意思是,在数据库之外的应用程序代码中使用瞬时复制来实现这一点是相当简单的,但是无论采用何种机制,您都不能解决启动复制和更新版本文档之间的竞争条件?
处理这类事情的“正确方法”是将您的版本放在每个文档中。因此,当您编写一个新文档时,您需要编写一个更新的版本标识符。然后,您的复制将使用动态筛选器仅检索与其版本匹配的更改文档。
因此,在接收数据库的_replicator文档中,您将有:

continuous: true,
  filter: "the/filter",
  query_params: "your/version_doc",

字符串
然后你会有the/filter类似于:

function(doc, req){
  return doc.version == req.query.version;
}

相关问题