如何在CouchDB中更改复制时传入的文档

时间:2012-05-04 22:23:34

标签: couchdb replication pouchdb

我需要replicate in CouchDB 数据从一个数据库到另一个数据库但在此过程中我想要更改正在复制的文档

  1. 主要删除特定字段(但评论中提到的其他应用程序)。
  2. 复制永远是100%单向(但评论中提到的其他应用程序可以使用双向和同步)
  3. 我更希望这个过程不会增加他们的修订版ID,但这可能会要求太多。
  4. 但我没有看到任何设计文档功能可以完成我想做的事情。

    由于似乎没有这样做,有什么计划可以添加这个?同时,那里有什么变通方法?

3 个答案:

答案 0 :(得分:2)

不,没有开箱即用的解决方案,因为这会违反多主机MVCC逻辑的整个目的和逻辑。

我在这里看到的唯一选择是创建自己的解决方案,但我不会将其称为复制,而是称为ETL(提取,转换,加载)。而对于ETL,有一些工具可以让你做到这一点,比如(在这里混合开源和商业广告):

市场上有更多的ETL工具。

答案 1 :(得分:1)

我认为这里最好的方法是将要过滤的字段分解为单独的文档,然后在复制过程中过滤掉文档。

答案 2 :(得分:-1)

当然最好的方法是have built-support for this,但是对我来说是一种解决方法,而不是使用the built-in replication来代码和使用自定义复制在许多情况下(特别是如果每​​个主人都可以推动其奴隶),仍然使用而不是继续使用其他内置插件,并使用良好的编码,它感觉这可能是近乎需要的更改/转换效率很高。

  1. 这需要在每个源/主服务器上放置有效的触发器以检测任何更改,我相信CouchDB确实提供(或至少PouchDB appears to),然后将更改复制到另一个位置也进行完全更改
  2. 如果更改源无法将更改推送到最终目的地,则此固定存储可能是目标可以从中拉出的本地存储 - 这可能会变得非常昂贵,尤其是在多主机中,因为每个位置不仅要存储&维护自己的数据,以及发送给每个人的数据(发送)。
  3. 此复制文件还会将每个源文档的修订ID放在文档的副本中......
    1. ......理想情况下,如果要复制{更新,又称主人},则必不可少。
    2. ...以下列之一的形式:
      1. 理想情况下是正常的" _rev"属性。事实上,the normal replication algorithm使用内置的"批量文档API"已经完成了这一点("保留了他们的修订版ID")看似我们的变量也会使用
      2. 否则有一个新的复制对象(有自己的_rev)加上另一个字段为" _rev_original" ntelling原来的转速。但那会有用吗?
      3. 显然这样的副本可以创建没问题。
      4. 如果目的地只是在阅读数据,可能没什么大不了的。
      5. 如果目的地也在写数据,那么看起来很毛茸茸。因为我们现在必须与这些非标准修订合并。但是可行。
    3. 与此相关( 编码自定义/改进的复制(完成这项显然缺失的功能),理想情况下不会改变Pouch,尤其是Couch源代码 ),因为< strong>起始/基础材料(标准方法),这里the normal Couch replication algorithm不幸地说明了它只使用了内置操作,但它看起来像它,而且the official overview of what it does 3}};我怀疑Pouch实现了这一点,可能在Pouch's replicate.js (latest release as of 2014.07)
  4. 进一步的实施细节? - 那些知道的人,请把它放在这里。

    这是一个&#34;社区维基&#34;回答所以请延长它。

    另请注释链接&amp;任何人/系统已经或正在尝试这样或类似的细节。